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を使って検索機能がついたアプリを作ろう!
この記事が気に入ったらサポートをしてみませんか?