使用Ransack搜索标签

时间:2012-08-05 13:27:33

标签: ruby-on-rails activerecord ransack

我正在使用Ransack通过某些模型执行相当复杂的搜索。其中一个模型包含自由文本,并使用acts_as_taggable gem标记单词。

我正在尝试创建这些单词的集合选择器,以便ransack可以从用户可以定义的标记子集中找到任何全文记录。

这让我几乎到了那里,但是如果我尝试选择多个单词,它就不会返回任何结果!

= f.select :note_in, @freetexts.tag_counts_on(:tags), {}, {:multiple => true}

2 个答案:

答案 0 :(得分:0)

Ransack并不是真正面向复杂的搜索。很有可能的是,如果你有足够的压力,那么你最终会遇到一个更难的问题,即如果你做了复杂的选择。

对于复杂的搜索,我会推荐Sequel,来自ransack的同一作者,更好地面向复杂的搜索。

此外,根据thes主题,你处于死胡同: Ransack and acts-as-taggable-on issues

答案 1 :(得分:0)

我根本不是专家,但这种非搜身解决方案适用于那些需要使用act-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范围之外的new:tags param。您可以使用过滤掉Ransack为您提供的结果。