条件によって更新後の遷移先ページを変える
編集画面への導線が二通りあって、編集後は編集前のページに戻るようにして欲しい!というリクエストがあったので対応した。
- A画面 → 編集画面(edit,update) → A画面
- B画面 → 編集画面(edit,update) → B画面
こんな感じ。
下記のような対処をした。
def edit if request.referer.include?("B画面のURLで一意性のある文字列") then @back_to = request.referer end end
def editで遷移元(request.referer)を判定し、@back_toにURLを格納
<%= f.hidden_field :back_to, :value => @back_to %>
_form.html.erbにhidden_fieldとして@back_toをセット。これによりdef updateに渡すparamsの中にback_toが入る。
def update if params["sample"]["back_to"].blank? format.html { redirect_to A画面のパス, notice: 'A画面に戻ります' } else format.html { redirect_to params["sample"]["back_to"], notice: 'B画面に戻ります' } end end
paramsにback_toの条件でredirect_toを分ける。
もっとイカした方法あるかなぁ。