ransackやkaminariで任意のパラメータを送る方法
環境
Windows8
Rails 5.1.4
ruby 2.4.1
なぜこの記事を書いたのか
学校でRailsを使ってグループ開発をしている時に任意のパラメータを埋め込んで送る方法がわからず意外と詰まったので、私と同じ状況の人がいたら助けになると思って書きました。
後、自分が忘れないためです。
概要
ransackやkaminariで任意のパラメータを送る方法が存在します。
それを、ここに記します。
ransackとkaminariについて
ransack
Tableのソートが簡単にできたり、Viewの検索フォームが簡単に作れる便利なgemです。
ransackの使い方に関しては、下記のサイトが非常に分かりやすかったので是非参考にしてください。
[Ransackで簡単に検索フォームを作る73のレシピ]
(http://nekorails.hatenablog.com/entry/2017/05/31/173925)
kaminari
ページネーションが簡単にできる便利なgemです。
ページネーションは、情報量が多くてページが縦に伸びる時に便利です。
kaminariの使い方に関しては、下記のサイトが非常に分かりやすかったので是非参考にしてください。
[kaminari徹底入門]
(https://qiita.com/nysalor/items/77b9d6bc5baa41ea01f3)
本題
ransackやkaminariを使ったViewで任意のパラメータを送る方法を書いていきます
ransackのソート機能で任意のパラメータを送る方法
下のView部分で使われているプログラムのようにsort_linkにparamsを埋め込みます。
<%= sort_link(@q , :name, "名前",params: {:param => "test"}) %>
paramsを埋め込んだ状態のリンクをクリックしてログを見てみます。
するとParamtersに任意のパラメータであるtestが送られている事がわかります。
Parameters: {"param"=>"test", "q"=>{"s"=>"name asc"}}
ちなみに絶対、params: {:param =>"任意のパラメータ"}の形式ではないと、駄目というわけではないです。下のようにもできます。
<%= sort_link(@q , :name, "名前",tests: {:test => "param"}) %>
Parameters: {"q"=>{"s"=>"name asc"}, "tests"=>{"test"=>"param"}}
kaminariのページネーション機能で任意のパラメータを送る方法
kaminariの場合もransackの時とほぼ変わらないです。
<%= paginate @user,params: {:param => "test"}%>
Parameters: {"page"=>"2", "param"=>"test"}
おまけ
短くなりそうなのでkaminariのパラメータに関してもう少し書きます。
実は、kaminariのパラメータの"page"という名前は変更する事が可能です。
下のように:param_name => "変更する名前"とします。
今回、変更する名前をtestにしています。
<%= paginate @user,:param_name => 'test'%>
この状態でページネーションの2を押下します。
Parameters: {"test"=>"2"}
pageがtestに変わりました。
タブを使っていたりして複数のページネーションが一つのページに存在する画面を作る際などに需要があると思います。
以上です。