Ссылка на страницу, которую вы посетили перед формой

У меня есть страница со списком, затем форма, а затем страница с благодарностью. Мне нужно разместить ссылку на странице благодарности, которая возвращает пользователя на страницу, на которой он находился до того, как форма всегда меняется. Я пытался использовать это:

= link_to "Back", :back

Но это только возвращает их на предыдущую страницу, поэтому форма.

6 ответов

Решение

Ну, вы можете установить метод на странице формы, чтобы собрать этот 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 двух страниц назад.

Отказ от ответственности: это не проверено. Идея только.

добавлять

Сессия принадлежит контроллеру. Это не помощник, вы можете использовать непосредственно в поле зрения. Вам нужно определить переменную экземпляра в контроллере, а затем вы можете использовать ее в поле зрения. Как это

# 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 %>

Документация по Rails API для link_to

Использование символа:back вместо хеша опций создаст ссылку на реферер (обратная ссылка JavaScript будет использоваться вместо реферера, если таковой не существует).

Поскольку вы говорите, что перед формой может быть другая страница, вероятно, request_url может вам помочь. Вы можете сохранить ваш request_url в параметре и перенаправить на param_url, если он есть.

Вот источник, который вы можете взять для справки. http://programming-tut.blogspot.com/2010/06/ruby-on-rails-request-url.html

Это работает для меня:

В контроллере из предыдущего вида:

cookies[:original_referrer] = request.orignal_url

установить cookie в браузере с URL исходной страницы

В контроллере с текущего вида:

redirect_to cookies[:original_referrer]

Если использовать в контроллере, вы можете напрямую использовать как это:

def some_action
  # some code
  redirect_to :back
end
Другие вопросы по тегам