Rails - 拦截respond_with

时间:2016-03-03 04:27:40

标签: ruby-on-rails controllers respond-with

我正在使用第三方控制器:

   class LibController

      def update
        # 29 lines of code
        respond_with resource
      end

   end

我想在最后做respond_with以外的事情。但我不想只将所有29行复制/粘贴到MyController.update。不幸的是,我无法找到在其他地方渲染或重定向的方法:

   class MyController < LibController

     def update
       super
       redirect_to somewhere_else
     end

   end

我得到DoubleRenderError: Render and/or redirect were called multiple times in this action。我认为这是因为respond_with立即调用了render。有没有办法阻止/阻止它?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你正在进行两次重定向。 尝试删除更新方法上的一个重定向。

使用 respond_with 时,检查以下示例代码,该代码显示等效响应。

def create
  @user = User.new(params[:user])
  flash[:notice] = 'User was successfully created.' if @user.save
  respond_with(@user)
end

与以下内容完全相同:

def create
  @user = User.new(params[:user])

  respond_to do |format|
    if @user.save
      flash[:notice] = 'User was successfully created.'
      format.html { redirect_to(@user) }
      format.xml { render xml: @user, status: :created, location: @user }
    else
      format.html { render action: "new" }
      format.xml { render xml: @user.errors, status: :unprocessable_entity }
    end
  end
end