ActiveRecordのorを任意の数だけ動的に付与したい
あるモデルに対してOR検索したい。
具体例を挙げると…対象となる文書群から『クリスタルガイザー』または『烏龍茶』を含む文書を抽出したい。ってヤツ。
Rails5からActiveRecordでorが使えるようになった。
AwesomeModel.where(body: XXX).or(AwesomeModel.where(body: YYY)
ってヤツ。検索フォーム経由で上のようなor検索をしたかった。
inject
を使えばイケそうだった。
こんな感じ。
下記は、あるモデルのdescriptionという値に対するLIKE検索をorで数珠つなぎにしてる。
query_listはstringの配列。
1 2 3 4 5 6 7 8 |
def self.search_oring_like(query_list) return all unless query_list first_where = self.where('description LIKE ?', "%#{query_list.first}%") query_list.drop(1).inject(first_where) do |selfObject, query| selfObject.or(self.where('description LIKE ?', "%#{query}%")) end end |
336px
336px
関連記事
-
-
Docker導入したらどうするの?
Do …
-
-
MacでDockerした感想文
Co …