Ransackとは
Railsのgemで、簡単に検索機能を実装することができます。
公式ドキュメントはこちら
この記事の目的
僕が使っていてハマったところや、欲しかったけどなかなか見つからなかった情報なんかを入れていきます(たまに更新します)
Ransackを使ったときの細かい?Tips
空欄で検索できないようにする
search_fieldの最後「required: true」が重要です。
hoge.html.haml
.search_form
= search_form_for(@q, url: search_path) do |f|
= f.label :name, "keyword", placeholder:"商品名、一般名で検索できます"
= f.search_field :standard_name_cont_all, required: true
= f.submit "検索"
AND検索
*_all と足せばOKなのですが、検索窓に「鈴木 テニス」と入れても検索クエリは"鈴木 テニス"と一つにしかなりません。
コントローラーで分けてあげる必要があります。
params[:q]['standard_name_cont_all'] = params[:q]['standard_name_cont_all'].split(/[\p{blank}\s]+/)
@q = Product.ransack(params[:q])
@products = @q.result(distinct: true).page(params[:page]).order(price: 'DESC')
大事なのはここですね、 **.split(/[\p{blank}\s]+/)**です
これを追加してあげると検索クエリが"鈴木"と"テニス"になるので、めでたくAND検索が可能になります。