リストページ、フォーム、お礼のページがあります。サンキューページに、常に変化するフォームの前にあったページにユーザーを戻すリンクを配置する必要があります。私はこれを使ってみました:
= link_to "Back", :back
しかし、これは前のページに戻るだけなので、フォームに戻ります。
さて、フォームページでメソッドを設定して、そのURLを収集できます。基本的な考え方は、カスタムセッション変数を使用して前のURLを保存し、次のセッションに保持することです。
フォームのアクションがSomeController#newであるとし、
class SomeController < ApplicationController
after_filter "save_my_previous_url", only: [:new]
def save_my_previous_url
# session[:previous_url] is a Rails built-in variable to save last url.
session[:my_previous_url] = URI(request.referer || '').path
end
end
ありがとうのページで、このmy_previous_url
沿って
session[:my_previous_url]
これは、前のURLの2ページ前のケースに合うはずです。
免責事項:これは検証されていません。アイデアのみ。
セッションはコントローラーに属します。ビューで直接使用できるヘルパーではありません。コントローラでインスタンス変数を定義する必要があり、それをビューで使用できます。このような
# Controller
@back_url = session[:my_previous_url]
# View
<%= link_to "Back", @back_url %>
これを試して
<%= link_to 'Back', url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com
Rails APIの例を使用できます。
<%= link_to "Back", :back %>
オプションハッシュの代わりに:backシンボルを使用すると、リファラーへのリンクが生成されます(リファラーが存在しない場合は、リファラーの代わりにJavaScriptバックリンクが使用されます)。
あなたが言っているので、それはフォームの前の別のページかもしれません、おそらくrequest_urlがあなたを助けることができます。 request_urlをparamに保存し、param_urlがあればリダイレクトします。
参照用に入手できるソースを次に示します。 http://programming-tut.blogspot.com/2010/06/Ruby-on-Rails-request-url.html
Controllerで使用する場合、次のように直接使用できます。
def some_action
# some code
redirect_to :back
end
これは私のために働く:
前のビューのコントローラーで:
cookies[:original_referrer] = request.orignal_url
元のページのURLを使用してブラウザにCookieを設定するには
現在のビューからのコントローラー:
redirect_to cookies[:original_referrer]