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]をつけてあげれば良い。