ransackと言うgemがあります。
これを利用すると、検索フォームが簡単に作れる優れものです。
なのですが・・・
これを使って、「複数のカラムにまたがって検索する方法」が分からなかったので、メモっておきます。
前提
こんなテーブルがあったとします。
title | headline | content |
---|---|---|
book1 | 自己啓発 | アウトプットする |
book1 | ストレス解消 | よく寝る |
book2 | レシピ | カレー |
controllerは、
1 2 3 4 |
def index @search = Book.ransack(params[:q]) @books = @search.result end |
こんな感じ。
その上で、index.html.erbに、
1 2 3 4 5 |
<%= search_form_for @search do |f| %> <%= f.label :content_cont, "検索する場合はこちら" %> <%= f.search_field :content_cont %> <%= f.submit "検索" %> <% end %> |
と入力すると、contentからしか検索できません。
なので、「レシピ」と検索しても何もヒットしなくなります。
ではどうすれば良いか?
「_or_」で繋げる
結論から書くと、「_or_」で繋げることで、複数のカラムから検索することが出来ました。
1 2 3 4 5 |
<%= search_form_for @search do |f| %> <%= f.label :title_or_headline_or_content_cont, "検索する場合はこちら" %> <%= f.search_field :title_or_headline_or_content_cont %> <%= f.submit "検索" %> <% end %> |
こんな感じで、titleとheadlineとcontentを_or_で繋げることで、複数のカラムから検索することが出来ます。
これで、「レシピ」と検索すれば、BOOK2がヒットします。
f.labelは別に変更しなくても良いか。
コメント