この記事では、redirect時に前のページの検索クエリを引き継いで、同じ検索結果を表示する方法について書きます。
######アプリの構造
細かく書きませんが、scaffoldで生成されるような
index=>edit=>update=>indexのフローとします。
ここで、update=>indexのredirect時に最初のindexの検索結果を保持してくれたら嬉しいなと考えました。
sample_controller.rb
def index
(データの一覧表示、データの検索機能)
end
def edit
(データの編集)
end
def update
(データを更新してindexにredirect)
end
#######解決策
sample_controller.rb
def index
・・・
end
def edit
・・・
@@request_referer = request.referer
・・・
end
def update
・・・
respond_to do |format|
if @sample.update(sample_params)
format.html { redirect_to @@request_referer, notice: '更新が完了しました。' }
else
format.html { redirect_to @@request_referer, notice: '更新が失敗しました。' }
end
・・・
end
request.refererは、前画面のURLを呼び出すメソッドです。
editで前画面のindexのURL(検索クエリを含む)をグローバル変数@@request_refererとして格納します。
updateは、成功しても失敗しても@@request_refererにredirectさせます。
updateに失敗した後に、もう一度edit画面に遷移すると、グローバル変数が上書きされてしまいますのでご注意下さい。