like検索時に配列の値をor
で簡単に複数検索できないものかと調べてみたら
ReneB/activerecord-like というgemで実現できました。
How to use it
単一カラムでのlike
words = %w(フロンターレ 中村憲剛) like_words = words.map{ |word| "%#{word}%" } puts Product.where.like(title: like_words).to_sql
SELECT "products".* FROM "products" WHERE ("products"."title" LIKE '%フロンターレ%' OR "products"."title" LIKE '%中村憲剛%')
複数カラムでのlike検索
or
検索で繋げていく方法。
words = %w(フロンターレ 中村憲剛) like_words = words.map{ |word| "%#{word}%" } puts Product.where.like(title: like_words).or(Product.where.like(authors: like_words)).to_sql
SELECT "products".* FROM "products" WHERE ( ("products"."title" LIKE '%フロンターレ%' OR "products"."title" LIKE '%中村憲剛%') OR ("products"."authors" LIKE '%フロンターレ%' OR "products"."authors" LIKE '%中村憲剛%') )
他にもnot_like
が使えるようになります。
全文検索を用意するほどでもないぐらいの規模ならありかもしれません。
ソース読んでみましたが、DSL全開でぱっと見理解できませんでした。activerecordの勉強が必要そうです。