【问题标题】:How to search using acts-as-taggable using conditions如何使用条件作为可标记的行为进行搜索
【发布时间】:2013-09-17 11:58:52
【问题描述】:

我有一个带有搜索表单的材料模型。搜索动作看起来有点像这样:

def search
  conditions = {}
  conditions[:version] = 'master'
  conditions[:status] = 'shared'
  conditions[:targ_lang] = params[:targ_lang] unless params[:targ_lang].blank?
  @results = Material.find(:all, :conditions => conditions)
end

我已经添加了作为可标记的 gem,它可以很好地保存标​​签,但是我无法将它添加到搜索表单中。该文档指出,要查找带有标签的材料,您可以使用以下代码:

Material.tagged_with(["awesome", "cool"], :match_all => true)

但我不知道如何将此条件添加到条件中。

更新

@results = Material.where(conditions) && Material.tagged_with(params[:tag_list])

如果使用了标签,则此方法有效,但如果标签列表为空白,则它不起作用,因此我需要一个与上述其他条件一样的条件,只有在字段不为空时才需要 Material.tagged_with ... 部分.

更新 2 - 错误的解决方案

这可行,但不是很优雅,是吗?

if params[:tag_list].blank?
  @results = Material.where(conditions)
else 
  @results = Material.tagged_with(params[:tag_list]).where(conditions)
end

【问题讨论】:

    标签: ruby-on-rails-3 search acts-as-taggable-on


    【解决方案1】:

    此代码对您不起作用?

    Material.where(conditions).tagged_with(['awesome', 'cool'], :match_all => true)
    

    或者相反的顺序:

    Material.tagged_with(['awesome', 'cool'], :match_all => true).where(conditions)
    

    更新

    阅读 github 上 act-as-taggable-one 上的文档,有一个名为 :any 的选项。也许你可以尝试使用它。我没有可以做一些测试的项目,但可能是这样的代码:

    Material.tagged_with(['awesome', 'cool', '', nil], :any => true).where(conditions)
    

    试一试。

    【讨论】:

    • 这可行,但问题是它没有考虑标签的空字段。因此,如果没有标签,则没有结果。需要的是标签只是另一个条件。
    • 嗯,我现在明白你的问题了。我刚刚用一些猜测更新了答案。也许它可以为您指明正确的方向。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2018-08-26
    • 2018-11-19
    • 2014-11-13
    • 2013-05-26
    • 1970-01-01
    相关资源
    最近更新 更多