検索フォームを持つ材料モデルがあります。検索アクションは次のようになります。
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
act-as-taggable 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