升级到Rails 4.2后的DoubleRenderError

时间:2015-04-12 20:14:30

标签: ruby-on-rails ruby-on-rails-4

将我的Rails 4应用程序升级到Rails 4.2后,我收到此错误:

  

Abstractvotroller :: InvoicesController中的DoubleRenderError #download

     

在此操作中多次调用渲染和/或重定向。   请注意,您最多只能调用渲染或重定向   每次行动一次。另请注意,重定向和渲染都不会终止   执行动作,所以如果你想在之后退出动作   重定向,你需要做类似" redirect_to(...)和   返回"

这是有问题的控制器:

class InvoicesController < ApplicationController

  def download
    @invoice = Invoice.find_by(:download_code => params[:id])
    if @invoice
      respond_to do |format|
        format.pdf { |pdf| render_pdf("attachment") }
      end
    else
      flash[:notice] = "File cannot be found."
      redirect_to signin_path
    end
  end

  private

  def render_pdf(disposition = "inline")
    pdf = InvoicePdf.new(@invoice, view_context)    
    options = { :filename => invoice_filename(@invoice), :type => "application/pdf", :disposition => disposition }
    send_data(pdf.render, options)
  end

end

知道我在这里缺少什么吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

事实证明,我只需在行尾添加and return即可使其正常工作。不过,我并不是100%确定为什么这是必要的。也许有人可以对此有所了解。

respond_to do |format|
  format.pdf { |pdf| render_pdf("attachment") and return }
end