Railsでransackを使った検索を実装した時、検索結果をupdate後も保持するためにしたこと
ransackというgemを利用すると以下のように簡単に検索が実装できる。 こちらの記事がとても参考になった。
Ransackで簡単に検索フォームを作る73のレシピ - 猫Rails
ただindex内でupdateを呼んで更新をかけて、またindexにリダイレクトするような処理をしたかったのだが、 その場合検索結果が保持されないため、以下のように保持されるように処理を作った。
users_controller.rb
def index @search_param = User.ransack(params[:q]) @users = @search_param.result() # 検索パラメータを保持 if params[:q].present? @q = params[:q].permit! end end def update # update処理省略 # 検索パラメーターがなかった場合permit!処理を行うとエラーになるため以下の分岐をさせる redirect_to users_path({q: params[:q].present? ? params[:q].permit! : params[:q] }) end
index.html.erb
<!-- 中略 --> <%= link_to '更新', users_path(user, params: { q: @q}), method: :put %> <!-- 中略 -->
ransackを使って検索を実装すると、params[:q]というパラメーターが入ってくるので、 そのパラメーターを保持してまずviewに渡し、そのパラメーターをupdateまでさらに渡す。
updateで処理終了後indexにredirectさせるときにそのurlパラメーターにparams[:q]をつけてあげれば良い。