ransack で複数カラムを検索する
activerecord-hackery/ransack を使ってみました。
Gemfileに書いて、検索ロジックをちょろっと変更して、viewをちょろっと修正すれば
検索画面がすぐできちゃう優れものです。
詳細はactiverecord-hackery/ransack
複数のカラムで検索させる方法
例えば title と description を検索対象にしたい場合はどうするのか?
簡単すぎで拍子抜けました。
view
viewのname属性を or でつなげておくだけ。
title_or_description_cont としておけば良いです。簡単!
<%= f.text_field :title_or_description_cont, class: "form-control", placeholder: "検索" %>
controller
def index @q = Article.published.ransack(params[:q]) @articles = @q.result.page(params[:page]) end
生成されるSQL
logger.info Article.published.ransack(params[:q]).result.to_sql
SELECT "Articles".* FROM "articles" WHERE "articles"."status" = 1 AND ("articles"."title" LIKE '%テスト%' OR "articles"."description" LIKE '%テスト%') ORDER BY "articles"."created_at
余談
これもgithubに書かれていますが、現在は、ransack/search どちらでも動作します。
Article.ransack(params[:q]) Article.search(params[:q])
が、searchメソッドは Ransack (2.0) で deprecated となる予定なので ransack を使っとくのが吉です。