我有一个带有搜索表单的材料模型。搜索操作看起来有点像这样:
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