首页 文章

升级到Rails 4.2后的DoubleRenderError

提问于
浏览
1

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

AbstractController :: 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 回答

  • 1

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

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

相关问题