読者です 読者をやめる 読者になる 読者になる

Railsで配列の値を like or 検索する

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の勉強が必要そうです。