rails ransack 検索機能

Rails

はじめに

Railsを開発していて一覧画面に検索機能を付けたいと

いうことがあると思います。
Ransackを用いると簡単に実装できるので

実装手順を書いていこうと思います。
前提条件としてDBにnameカラムのようなものが

あるといいですね。

Ransackインストール

gem 'ransack'
=>bundle

Railsサーバを起動したままであれば一度このタイミングで

再起動しておきましょう。
ransackをインストールすると

検索を行うためのransackメソッドがモデルに追加されます。

名称による検索

 def index
    @q = current_user.tasks.ransack(params[:q])
    @tasks = @q.result(distinct: true)
 end

続いて、タスク一覧画面に検索フォームを実装します。

 = search_form_for @q,class: 'mb-5' do |f|
  .form-group.row
   = f.label :name_cont, '名称', class: 'col-sm-2 col-form-label'
   .col-sm-10
     = f.search_field :name_cont, class: 'form-control'

ransackを利用する際は、検索フィールドの名前を

一定のルールで命名します。
ここでは「名称に〇〇を含む」という検索を実現したいため

ビュー内の名称フィールドを「name_cont」としています。

最後に

名称だけでなく登録日時による検索もできるので

ransackは便利ですね!