Ransackによる検索機能の追加

 ransackによる検索機能を追加して、タスク管理アプリの曖昧検索や検索フォームを追加した。

・gemに記述 (bundle install)

gem 'ransack'

・app/controller/tasks_controllerを修正

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


params[:q]  =>  ビューから送られてきたパラメーター

ransackメソッド  =>  送られてきたパラメーターを元にテーブルからデータ                                          を検索するメソッド

resultメソッド   =>   ransackメソッドで取得したデータを返す

・app/views/tasks/index.html.slimを修正する

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

search_form_for メソッド  =>  form_withメソッドと同じような働き

:name_cont  =>  _contメソッドはransackに用意されているメソッドで、検                                  索したワードが含まれているレコードを取得するためのメ                                 ソッド。今回は頭に':name'が含まれているため、名前カラ                                 ムを取得する。

 これによって、名前の曖昧検索機能を実装することができる。

また今回は_contメソッドを使ったが、他にも_eqメソッドは該当の項目と入力したフォームと合致したものを取得し、_gteqメソッドは該当の項目がフォームに入力した値と同じか、それよりも大きいことを条件にしたい時に使える。

このようにRansackにはさまざまなメソッドが用意されている。

・参考

Rails】 ransackを使って検索機能がついたアプリを作ろう!


この記事が気に入ったらサポートをしてみませんか?