#ransackとは
ransackとは検索機能を実装するためのツールです。
#ransack導入
gem 'ransack'
その後
$ bundle install
で導入できます。
#routes.rbに追加
Rails.application.routes.draw do
#省略
collection do
get 'search'
end
end
end
get 'search'をルーティングに追加します。
コントローラーのアクション以外を使う時はcollection doを使うみたいです。
#コントローラーにsearchアクションを追加
検索機能を取得するためにはprivate以下にメソッドを追記し、before_actionで
呼び出します。
class UsersController < ApplicationController
#省略
before_action :set_q, only: [:index, :search]
def index
@users = User.all
end
#省略
def search
@results = @q.result
end
def set_q
@q = User.ransack(params[:q])
end
private
def set_q
@q = User.ransack(params[:q])
end
#省略
end
*下の文は下の資料から引用します。
⚫︎params[:q] この後に作成するビューファイルから送られてくるパラメーター
⚫︎ransackメソッド 送られてきたパラメーターを元にテーブルからデータを検索するメソッド
⚫︎resultメソッド ransackメソッドで取得したデータを ActiveRecord_Relationの
オブジェクトに変換するメソッド
#キーワード検索方法
<%= search_form_for @q do |f| %>
<%= f.label :name, "Keyword" %>
<%= f.search_field :name_cont %>
<%= f.label :job_eq, '仕事' %>
<%= f.search_field :job_eq %>
<%= f.submit "検索" %>
<% end %>
<%= search_form_for @q do |f| %>〜<% end %>の間のコードが検索フォームです。
#いろいろな検索機能の種類
上のキーワード検索以外にも
数値の対象検索、複数の選択検索などもあるみたいです。
他の検索機能は下の資料が詳しいのいで確認してください。
#よく使うメソッド
下のメソッドがよく使うみたいです。
[検索したいカラム名]_eq 完全に一致するとき
[検索したいカラム名]_not_eq 完全に一致しないとき
[検索したいカラム名]_matches 一部が一致するとき
[検索したいカラム名]_does_not_match 一部が一致しないとき
他にもたくさんあるので下の資料から調べてみてください。
⚫︎参考資料
https://pikawaka.com/rails/ransack
https://qiita.com/nojinoji/items/e1b174220da8c81a1756