Ich baue ein Kundendatenbank/Fakturierungssystem. Wenn Rechnungen mit PDFKit in druckbare PDFs konvertiert werden können, werden sie aus dem Index Rechnungen über ein Formular ausgewählt, das Kontrollkästchen enthält, die die Rechnungs-IDs über den Parameter selected_invoices übergeben. Ich möchte auf diese Methode zurückgreifen und gleichzeitig die PDF-Adressetiketten für diese spezifischen Rechnungen erstellen. Ich kann nicht herausfinden, wo ich hier falsch liege. Wenn die Methode "Labels" aufgerufen wird, kann sie die Rechnungs-IDs aus den Parametern nicht sehen.Parameter zwischen mehreren Methoden in Rails übergeben
Hier ist der relevante Teil des Codes:
def generate_multiple_pdfs
#generate pdfs from selected invoices and save each to file
@invoices = Invoice.find(params[:selected_invoices])
files = []
@invoices.each do |invoice|
path = show_pdf_invoice_url(invoice)
filename = "invoice_#{invoice.id}.pdf"
files.push filename
kit = PDFKit.new(path)
pdf = kit.to_file("#{Rails.root}/public/invoices/#{filename}")
end
#generate address labels for selected invoices
path = labels_invoices_url
filename = "invoice_labels#{Date.today.to_formatted_s(:iso8601)}.pdf"
files.push filename
kit = PDFKit.new(path)
pdf = kit.to_file("#{Rails.root}/public/invoices/#{filename}")
...
end
Hier ist die Etiketten-Methode, die von PDFKit aufgerufen wird:
def labels
@invoices = Invoice.find(params[:selected_invoices])
render :layout => 'labels_layout'
end
Die Etiketten Methode fehlschlägt, ist hier, was im Hintergrund passiert:
Processing by InvoicesController#labels as HTML
Invoice Load (0.3ms) SELECT "invoices".* FROM "invoices" WHERE "invoices"."id" = $1 LIMIT 1 [["id", nil]]
Completed 404 Not Found in 1ms (ActiveRecord: 0.3ms)
ActiveRecord::RecordNotFound (Couldn't find Invoice with 'id'=):
app/controllers/invoices_controller.rb:160:in `labels'
Der Rest des Prozesses funktioniert gut, ich kann die PDFs für die in Stimmen werden erzeugt. Was fehlt mir hier?
Danke!
Können Sie zeigen, wie Sie Labels anrufen? Wo postet das Formular? – margo
Labels werden von pdfkit über die Route labels_invoices_url aufgerufen: 'path = labels_invoices_url' und dann' kit = PDFKit.new (path) '. Ich bin mir nicht sicher, wonach Sie fragen, wo das Formular veröffentlicht wird. – TheStrabusiness
Sie müssen die Parameter explizit an die Methode labels übergeben. Der params-Hash ist nur für die Methode verfügbar, auf die du poste. Daher rate ich zu den format-POSTs für generate_multiple_pdfs. – margo