将我的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
知道我在这里缺少什么吗?
感谢您的帮助。
答案 0 :(得分:1)
事实证明,我只需在行尾添加and return
即可使其正常工作。不过,我并不是100%确定为什么这是必要的。也许有人可以对此有所了解。
respond_to do |format|
format.pdf { |pdf| render_pdf("attachment") and return }
end