【Rails】検索機能(ransack)
はじめに
ransackの実装の流れをメモしておきます。
gemのインストール
Gemfile
gem 'ransack'
$ bundle install
Controller
def index @q = Board.ransack(params[:q]) @boards = @q.result(distinct: true).includes(:user).order(created_at: :desc).page(params[:page]) end
View
<%= search_form_for @q do |f| %> <div class="input-group mb-3"> # ここで、titleとbodyを検索対象にしています。 <%= f.search_field :title_or_body_cont, class: 'form-control', placeholder: '検索ワード' %> <div class="input-group-append"> <%= f.submit '検索' ,class: 'btn btn-primary'%> </div> </div> <% end %>
ransackにおけるdistinct: trueの必要性について
今回の例では、本当は必要ありませんが、 「関連する子テーブルの情報を条件に絞り込んで、親テーブルの検索結果を表示するとき」のケースの場合は必要になります。