Ransackとは
Ransackとは、複雑な検索を簡単に実装できるGem
特徴は以下3点
・search_form_forというフォームを使える
・検索方法を、述語で設定できる
・キー(:q)を使ってテーブルから情報を探す
検索の流れ
# コントローラー
def index
@p = モデル.ransack(params[:q])
@results = @p.result(distinct: true).order("RAND()")
end
# ビューファイル
<%= search_form_for @p, url: prefix_path do |f| %>
<%= f.collection_select :カラム名_eq, モデル名.all, :id, :name, {include_blank: "指定なし"} %>
<% end %>
コントローラーで生成した[:q]の情報が入った@pという変数をビューファイルのsearch_form_forに渡す
→フォームで生成された検索条件を使い、モデルを検索し、情報を配列で取得する。
フォーム部品のカラム名_eqの"_eq"が述語と呼ばれ、検索の方式を指定することができる。"_eq"の部分は完全一致を意味する。公式リファレンスをみると他にもいろいろあり、使い分けることができる。