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

Saf*_*wan 3 controller ruby-on-rails ruby-on-rails-4

题:

我是多么想在create行动之后重定向到不同的路径,如果是previous_page则../reader/new../reader/blog/:id,而如果是previous_page则../editor/new../editor/blog/:id.

阐释:

我想修改控制器操作,以便它可以重定向到不同的路径,具体取决于它来自哪个页面.例如,我有一个reader,editorblog模型.双方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
Run Code Online (Sandbox Code Playgroud)

Bor*_*aMa 5

你有几个选择:

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

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