【发布时间】:2015-04-12 20:14:29
【问题描述】:
将我的 Rails 4 应用程序升级到 Rails 4.2 后,我收到此错误:
InvoicesController#download中的AbstractController::DoubleRenderError
在此操作中多次调用渲染和/或重定向。 请注意,您只能调用渲染或重定向,最多 每个动作一次。另请注意,重定向和渲染都不会终止 动作的执行,所以如果你想在之后退出一个动作 重定向,您需要执行类似“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
知道我在这里缺少什么吗?
感谢您的帮助。
【问题讨论】:
-
你有
before_action潜伏在ApplicationController中吗?另一个可能愚蠢的即兴想法:尝试将render_pdf重命名为create_pdf。 -
你试过删除
respond_to块并只保留这个render_pdf("attachment") }吗? -
@janfoeh:谢谢,但不,在这种情况下没有
before_action。重命名也没有用。 -
您的
InvoicePdf渲染器类是什么样的?我有一些自定义的 PDF 渲染器类,我记得当我从 4.0 升级到 4.2 时它们中断了,尽管方式不同。这是我的Rails 4.2/WickedPDF-based renderer,以防万一。 -
嗯。 Prawn 似乎不像我的解决方案那样依赖于 ActionView,因此它与 Rails 4.1 中出现的
render_to_string更改无关。很抱歉,但这里没有很好的见解。
标签: ruby-on-rails ruby-on-rails-4