Ruby on Rails

【Ruby on Rails】gem "ransack"を使って検索機能を実装

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 %>

-Ruby on Rails