Ruby
RubyOnRails

ransackやkaminariで任意のパラメータを送る方法

ransackやkaminariで任意のパラメータを送る方法

環境

Windows8
Rails 5.1.4
ruby 2.4.1

なぜこの記事を書いたのか

学校でRailsを使ってグループ開発をしている時に任意のパラメータを埋め込んで送る方法がわからず意外と詰まったので、私と同じ状況の人がいたら助けになると思って書きました。

後、自分が忘れないためです。

概要

ransackやkaminariで任意のパラメータを送る方法が存在します。
それを、ここに記します。

ransackとkaminariについて

ransack

Tableのソートが簡単にできたり、Viewの検索フォームが簡単に作れる便利なgemです。
ransackの使い方に関しては、下記のサイトが非常に分かりやすかったので是非参考にしてください。
Ransackで簡単に検索フォームを作る73のレシピ

kaminari

ページネーションが簡単にできる便利なgemです。
ページネーションは、情報量が多くてページが縦に伸びる時に便利です。
kaminariの使い方に関しては、下記のサイトが非常に分かりやすかったので是非参考にしてください。
kaminari徹底入門

本題

ransackやkaminariを使ったViewで任意のパラメータを送る方法を書いていきます

ransackのソート機能で任意のパラメータを送る方法

下のView部分で使われているプログラムのようにsort_linkにparamsを埋め込みます。

ransackを使ったView
<%= sort_link(@q , :name, "名前",params: {:param => "test"}) %>

paramsを埋め込んだ状態のリンクをクリックしてログを見てみます。
するとParamtersに任意のパラメータであるtestが送られている事がわかります。

ログ
Parameters: {"param"=>"test", "q"=>{"s"=>"name asc"}}

ちなみに絶対、params: {:param =>"任意のパラメータ"}の形式ではないと、駄目というわけではないです。下のようにもできます。

ransackを使ったView
<%= sort_link(@q , :name, "名前",tests: {:test => "param"}) %>
ログ
Parameters: {"q"=>{"s"=>"name asc"}, "tests"=>{"test"=>"param"}}

kaminariのページネーション機能で任意のパラメータを送る方法

kaminariの場合もransackの時とほぼ変わらないです。

kaminariを使ったView
 <%= paginate @user,params: {:param => "test"}%>
ログ
Parameters: {"page"=>"2", "param"=>"test"}

おまけ

短くなりそうなのでkaminariのパラメータに関してもう少し書きます。
実は、kaminariのパラメータの"page"という名前は変更する事が可能です。

下のように:param_name => "変更する名前"とします。
今回、変更する名前をtestにしています。

kaminariを使ったView
 <%= paginate @user,:param_name => 'test'%>

この状態でページネーションの2を押下します。

ログ
  Parameters: {"test"=>"2"}

pageがtestに変わりました。

タブを使っていたりして複数のページネーションが一つのページに存在する画面を作る際などに需要があると思います。

以上です。