Я использую рельсы (5.0.7.2) для небольшого проекта. Для тегов я выбираю act-as-taggable-on, а для поиска pg_search gems. Поскольку я хочу, чтобы теги были доступны для поиска, я сначала создал папку в каталоге приложения под названием «утилиты». Затем я создал в этой папке файл с именем «search_tags.rb».
Контент:
ActsAsTaggableOn::Tag.class_eval do
# includes
include PgSearch
# search scope
pg_search_scope :search, against: {
name: 'A',
},
using: {
tsearch: {
dictionary: 'english',
prefix: true
}
}
class SearchTags; end
end
Однако, если я хочу использовать эту функцию поиска для тегов в моем контроллере тегов, я получаю ошибку «метод не определен». Если я включаю код из файла выше прямо в действие контроллера, он работает правильно. Таким образом, я предполагаю, что он может вообще не загружаться из этой новой папки.
Каким будет правильный способ сделать контент из расширения доступным для моего контроллера?
Обновлять:
Я создал:
# app/models/concerns/searchable.rb
module Searchable
extend ActiveSupport::Concern
included do
include PgSearch
# search scope
pg_search_scope :search, against: {
name: 'A',
},
using: {
tsearch: {
dictionary: 'english',
prefix: true
}
}
end
end
Я удалил папку утилит и файл . В контроллере тегов сейчас делаю
class ActsAsTaggableOn::Tag
include Searchable
end
Это работает и выглядит немного лучше. Однако не оптимально. По крайней мере, не очень хорошо иметь вызов класса и включать его в контроллер.