私のレールアプリでは、他のデバイスから注文の詳細を受け取り、pdfを生成してAWSにアップロードするAPIを作成しています.wicked_pdf gemを使用してpdfを生成していますaws-sdkはAwsにデータをアップロードします。コントローラのコードは以下の通りです。wicked pdf gemを使用している間にレンダリングエラーがダブル
def order_invoice
response = Hash.new
result = Hash.new
if params[:order] && params[:order][:txnid] &&
params[:no_of_copies] && params[:order][:total_amount]!= 0
@order = params[:order]
...
@no_of_copies = params[:no_of_copies]
invoice = create_pdf
response['result'] = invoice
response.merge! ApiStatusList::OK
else
response.merge! ApiStatusList::INVALID_REQUEST
end
render :json => response
end
def create_pdf
pdf = WickedPdf.new.pdf_from_string(
render_to_string(template: 'invoices/generate_invoice.pdf.erb'))
send_data(pdf, filename: params[:order][:txnid] + ".pdf" ,
type: 'application/pdf',
disposition: 'attachment', print_media_type: true)
save_path = Rails.root.join('pdfs', @order['txnid'] + ".pdf")
File.open(save_path, 'wb') do |file|
file << pdf
filename = @order['txnid'] + ".pdf"
end
file_name = @order['txnid'] + ".pdf"
upload = Invoice.upload(save_path, file_name)
end
私は、次のエラー
AbstractController :: APIのDoubleRenderError :: V0 :: InvoiceApiController#order_invoice この中で複数回呼び出されたレンダリングおよび/またはリダイレクト取得PDFを生成し、アップロード中アクション。レンダリングまたはリダイレクトを呼び出すことができるのは1回の操作につき1回だけです。また、リダイレクトもレンダリングもアクションの実行を終了させないので、リダイレクト後にアクションを終了するには、 "redirect_to(...)and return"のような処理が必要です。
アップロードしたpdfのリンクを回答する必要があります。ここでは2つのレンダリングを使用しているためにエラーが発生しています。しかし、私はエラーを克服する方法を知りません。誰も私がコードを微調整し、修正するのを助けることができます。初心者のレールとapiの。
send_data
経由#create_pdf
- に
render :json => response
を経由して、アクションに
UPD:あなたはrepsonseを2回レンダリングするため
だから、あなたは、単一のリクエストの応答に息子だけでなく、PDFファイルを送信したいですか? –
@Jagdeep Singhはいまさに!! –
json *(息子ではない)。 –