2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】Ransackで検索機能を作るときの細かいTips

Last updated at Posted at 2020-03-25

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 "検索"

Image from Gyazo

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検索が可能になります。

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?