控制器根据前一页重定向到不同的路径

题:

create操作后我想如何重定向到不同的路径,如果previous_page是../reader/new转到../reader/blog/:id ,而如果previous_page是../editor/new则转到../editor/blog/:id

阐释:

我想修改控制器操作,以便它可以重定向到不同的路径,具体取决于它来自哪个页面。 例如,我有一个readereditorblog模型。 readereditor都可以创建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 

你有几个选择:

  • 如果你需要的只是重定向回上一页,请使用redirect_to :back控制器
  • 添加一些处理HTTP引用的逻辑,即根据控制器中的request.referer决定重定向的位置
  • 将参数中的重定向信息传递create动作,例如,当来自“reader”页面时传递params[:redirect_to] = "reader" ,并根据此参数决定重定向的位置。 您甚至可以将整个URI重定向到param中,然后重定向到它(但这种方法不安全,因为用户可能会破坏params)。

通常,我会选择第三个选项(参数),因为您可以最好地控制重定向过程(前两个选项依赖于HTTP引用,任何访问者也可能会对其进行修改,因此可能不安全)。