我正在使用 Ransack 通过一些模型执行相当复杂的搜索。其中一个模型包含自由文本并使用acts_as_taggable gem 来标记单词。
我正在尝试创建这些单词的集合选择器,以便 ransack 可以从用户可以定义的标签子集中找到任何全文记录。
这让我几乎到了那里,但如果我尝试选择多个单词,它不会返回任何结果!
= f.select :note_in, @freetexts.tag_counts_on(:tags), {}, {:multiple => true}
我正在使用 Ransack 通过一些模型执行相当复杂的搜索。其中一个模型包含自由文本并使用acts_as_taggable gem 来标记单词。
我正在尝试创建这些单词的集合选择器,以便 ransack 可以从用户可以定义的标签子集中找到任何全文记录。
这让我几乎到了那里,但如果我尝试选择多个单词,它不会返回任何结果!
= f.select :note_in, @freetexts.tag_counts_on(:tags), {}, {:multiple => true}
Ransack 并不真正面向复杂的搜索。很有可能,如果您对搜查的压力足够大,那么您最终会遇到一个比您在哪里进行复杂选择时更难的问题。
对于复杂搜索,我会推荐 Sequel,来自 ransack 的同一作者,并且更适合复杂搜索。
此外,根据他们的线程,您处于死胡同: Ransack and act-as-taggable-on issues
我根本不是专家,但是这种非洗劫解决方案可以适用于那些需要通过带有acts-as-taggable-on gem 的标签进行过滤的人:
@search = MyModel.ransack(params[:q])
@result = @search.result(distinct: true).includes(:related_model)
@result = @result.tagged_with(params[:tags].split(/\s*,\s*/)) if params[:tags].present?
@result = @result.paginate(page: params[:page], per_page: 20)
这需要一个超出 Ransack 范围的新 :tags 参数。您可以使用过滤掉 Ransack 给您的结果。