升級我的Rails 4程式後到Rails 4.2我收到此錯誤後:DoubleRenderError升級到Rails 4.2
AbstractController::DoubleRenderError in InvoicesController#download
Render and/or redirect were called multiple times in this action. Please note that you may only call render OR redirect, and at most once per action. Also note that neither redirect nor render terminate execution of the action, so if you want to exit an action after redirecting, you need to do something like "redirect_to(...) and return".
這是有問題的控制器:
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
任何想法,我是什麼在這裏失蹤?
感謝您的任何幫助。
你在'ApplicationController'中潛伏了'before_action'嗎?另一個可能是愚蠢的現成想法:嘗試將'render_pdf'重命名爲'create_pdf'。 – janfoeh
你試過去掉'respond_to'塊並只保留這個'render_pdf(「attachment」)}'? –
@janfoeh:謝謝但不是,在這種情況下沒有'before_action'。重命名也沒有辦法。 – Tintin81