Я использую рельсы (5.0.7.2) для небольшого проекта. Для тегов я выбираю гемы actions-as-taggable-on, а для поиска - жемчужины pg_search. Поскольку я хочу, чтобы теги были доступны для поиска, я сначала создал папку в каталоге приложения под названием «утилиты». Затем я создал в этой папке файл с названием "search_tags.rb".
Content:
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
Однако, если я хочу использовать эту функцию поиска по тегам в моем контроллере тегов, я получаю ошибку «method undefined». Если я включу код из файла выше прямо в действие контроллера, он будет работать правильно. Таким образом, я предполагаю, что он может вообще не загружаться из этой новой папки.
Как правильно сделать контент из расширения доступным моему контроллеру?
Обновление:
Я создал:
# 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
Это работает и выглядит немного лучше. Однако не оптимально. По крайней мере, неудобно иметь вызов класса и его включение в контроллер.