【问题标题】:DoubleRenderError after upgrading to Rails 4.2升级到 Rails 4.2 后出现 DoubleRenderError
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2015-03-14
    • 2015-03-17
    • 2015-05-15
    • 2015-03-01
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多