Gem"ransack"のアウトプット


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"の部分は完全一致を意味する。公式リファレンスをみると他にもいろいろあり、使い分けることができる。