user1738017
user1738017

Reputation: 627

Link back to page visited before form

I have a listing page, then a form, then a thank you page. I need to put a link on the thank you page that takes the user back to the page they were on before the form which always varies. I've tried using this:

= link_to "Back", :back

But this only takes them back to the previous page, so the form.

Upvotes: 32

Views: 40571

Answers (6)

Billy Chan
Billy Chan

Reputation: 24815

Well, you can set a method in the form page to collect that url. The basic idea is to use a custom session variable to store previous url and keep it to next session.

Suppose your form's action is SomeController#new, then

class SomeController < ApplicationController
  after_action "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

Then in the thank you page, you can get this my_previous_url by

 session[:my_previous_url]

This should be able to suit your case, the previous url two pages ago.

Disclaimer: This is not verified. Idea only.

Add

Session belongs to controller. It is not a helper you can use directly in view. You need to define an instance variable in controller and then you can use it in view. Like this

# Controller
@back_url = session[:my_previous_url]
 
# View
<%= link_to "Back", @back_url %>

Upvotes: 21

Sheldon Hage
Sheldon Hage

Reputation: 424

This works for me:

In controller from previous view:

cookies[:original_referrer] = request.orignal_url

to set a cookie on the browser with the URL of the originating page

In the controller from the current view:

redirect_to cookies[:original_referrer]

Upvotes: 0

ilgam
ilgam

Reputation: 4420

You can use the example from Rails API:

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

Rails API Doc for link_to

Using a :back Symbol instead of an options hash will generate a link to the referrer (a JavaScript back link will be used in place of a referrer if none exists).

Upvotes: 14

zw963
zw963

Reputation: 1239

If use in Controller, you can direct use like this:

def some_action
  # some code
  redirect_to :back
end

Upvotes: 0

panicoper
panicoper

Reputation: 1054

Try this

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

here is more details.

Upvotes: 58

Nich
Nich

Reputation: 1102

Since you saying,it might be different page before form, probably request_url can help you. you can save your request_url in a param and redirect to param_url if there is.

here is a source that you can take for reference. http://programming-tut.blogspot.com/2010/06/ruby-on-rails-request-url.html

Upvotes: 1

Related Questions