moxt

Just another Blog site

ActiveRecordのorを任意の数だけ動的に付与したい

   

やりたいこと。
あるモデルに対してOR検索したい。

具体例を挙げると…対象となる文書群から『クリスタルガイザー』または『烏龍茶』を含む文書を抽出したい。ってヤツ。

Rails5からActiveRecordでorが使えるようになった。
AwesomeModel.where(body: XXX).or(AwesomeModel.where(body: YYY)ってヤツ。


検索フォーム経由で上のようなor検索をしたかった。 injectを使えばイケそうだった。 こんな感じ。 下記は、あるモデルのdescriptionという値に対するLIKE検索をorで数珠つなぎにしてる。 query_listはstringの配列。 orが実行するためには、予めwhere(XXX)が呼ぶ必要がある。 というわけで、query_listの先頭クエリをwhereして、残りのクエリをor繋ぐようにしてる。 where句のSQL文書くの面倒、汚いと感じるのであれば、別途scopeを定義するなどして、よき感じにしてください。 書き方がイケてない感じするけど、それっぽく動いてるのでよし。 イケてる書き方あったら教えてください。

 - Rails, プログラミング

336px




336px




  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事