【发布时间】:2020-06-17 06:54:42
【问题描述】:
我在一个小项目中使用 rails (5.0.7.2)。对于标签,我选择acts-as-taggable-on 和搜索 pg_search gems。由于我希望标签是可搜索的,我首先在应用程序目录中创建了一个名为“utilities”的文件夹。然后我在该文件夹中创建了一个名为“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
这可行并且看起来更好一些。然而不是最优的。至少让类调用并包含在控制器中感觉不太好。
【问题讨论】:
标签: ruby-on-rails acts-as-taggable-on pg-search