Ruby on Rails で検索機能を手っ取り早く実現するには、 gem ransack
を利用するのが便利です。
gem ransack をインストール
Gemfile
に下記を追加して、いつもどおり bundle install
gem 'ransack'
設定していくよ
In your Controller
class HogeController < ApplicationController
def index
@q = Hoge.ransack
@hoges = @q.result(distinct: true)
end
def search
@q = Hoge.ransack(search_params)
@hoges = @q.result(distinct: true)
end
private
def search_params
params.require(:q).permit!
end
Routing
Rails.application.routes.draw do
root to: 'hoges#index'
get 'search', to: 'hoges#search'
end
In your View
<%= search_form_for @q do |f| %>
# 名前を含む検索
<%= f.label :name_cont %>
<%= f.search_field :name_cont %>
# 都道府県などを選択して絞り込み
<%= f.label :prefecture_id %>
<%= f.collection_select :prefecture_id_eq, @prefectures, :id, :name, include_blank: '指定なし' %>
<%= f.submit %>
<% end %>