web-dev-qa-db-ja.com

フォームの前にアクセスしたページに戻るリンク

リストページ、フォーム、お礼のページがあります。サンキューページに、常に変化するフォームの前にあったページにユーザーを戻すリンクを配置する必要があります。私はこれを使ってみました:

= link_to "Back", :back

しかし、これは前のページに戻るだけなので、フォームに戻ります。

26
user1738017

さて、フォームページでメソッドを設定して、その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 %>
18
Billy Chan

これを試して

<%= link_to 'Back', url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com

詳細はこちら

53
panicoper

Rails APIの例を使用できます。

<%= link_to "Back", :back %>

link_toのRails APIドキュメント

オプションハッシュの代わりに:backシンボルを使用すると、リファラーへのリンクが生成されます(リファラーが存在しない場合は、リファラーの代わりにJavaScriptバックリンクが使用されます)。

8
ilgam

あなたが言っているので、それはフォームの前の別のページかもしれません、おそらくrequest_urlがあなたを助けることができます。 request_urlをparamに保存し、param_urlがあればリダイレクトします。

参照用に入手できるソースを次に示します。 http://programming-tut.blogspot.com/2010/06/Ruby-on-Rails-request-url.html

1
Nich

Controllerで使用する場合、次のように直接使用できます。

def some_action
  # some code
  redirect_to :back
end
0
zw963

これは私のために働く:

前のビューのコントローラーで:

cookies[:original_referrer] = request.orignal_url

元のページのURLを使用してブラウザにCookieを設定するには

現在のビューからのコントローラー:

redirect_to cookies[:original_referrer]
0
Sheldon Hage