2016-03-09 4 views
2

Вопрос:контроллера перенаправлять различные пути в зависимости от предыдущей страницы

Как я хочу, чтобы перенаправить на другой путь после create действий, учитывая, если previous_page является ../reader/new идет в ../reader/blog/:id, в то время как если previous_page это ../editor/new идет в ../editor/blog/:id.

Explaination:

Я хочу изменить действия контроллера таким образом, что он может перенаправить на другой путь, в зависимости на какой странице он приходит. Например, у меня есть модели reader, editor и blog. Оба reader и editor могут создавать blog.

Вот оригинал blogs_controller:

class BlogsController < ApplicationsController   
     def create 
     @blog = Blog.new(blog_params) 
     respond_to do |format| 
      if @blog.save 
      format.html { redirect_to @blog } 
      else 
      format.html { render :new } 
      end 
     end 
     end 

     private 

     def blog_params 
     params.require(:service).permit(:title, :content) 
     end 
    end 

ответ

4

У вас есть несколько вариантов:

  • использование redirect_to :back в контроллере, если все, что вам нужно перенаправлять назад на предыдущую страницу
  • добавить некоторую логическую обработку HTTP-реферера, то есть решить, где перенаправить на основе request.referer в контроллере
  • передает информацию о перенаправлении по параметру в действие create, например. передайте params[:redirect_to] = "reader" при переходе со страницы «читателя» и решите, где перенаправить на основе этого параметра. Вы даже можете перевести весь URI в параметр и просто перенаправить на него (но этот подход небезопасен, поскольку параметры могут быть искалечены пользователями).

Вообще, я бы выбрал третий вариант (параметры), как у вас есть лучший контроль над перенаправлением процесса (первые два варианта полагаться на HTTP реферера, который также может быть наломать любым посетителем, таким образом, являются потенциально небезопасными).

+0

спасибо, ваш первый и второй вариант делают трюк. Но я не могу понять последний вариант. Как передать param [: redirect_to]? Вы положили его внутри действия 'create' контроллера? –

+0

Извините, я имел в виду 'params [: redirect_to [', позвольте мне объяснить дальше. Например, я предполагаю, что у вас есть форма в действии 'reader/new'. Затем вы можете добавить скрытое поле в эту форму и установить его символическое значение для требуемого перенаправления, например. 'hidden_field_tag: redirect_to," reader ". Затем этот параметр будет передан в действие create как 'params [: redirect_to]', и действие 'create' контроллера может отреагировать на этот параметр и перенаправить на нужную страницу считывателя. Я исправил опечатку в ответе. – BoraMa

Смежные вопросы