2016-04-16 39 views
0

我正在构建客户数据库/发票系统。使用PDFKit将发票准备好转换为可打印的PDF时,可以通过包含复选框的表单从发票索引中选择它们,这些复选框通过selected_invoices参数传递发票ID。我想捎带该方法并同时为这些特定发票创建PDF地址标签。我似乎无法弄清楚我在这里出错的地方。当调用“标签”方法时,它无法从参数中查看发票ID。在Rails中的多个方法之间传递参数

下面的代码的相关部分:

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 

这里的标签方法得到由PDFKit称为:

def labels 
@invoices = Invoice.find(params[:selected_invoices]) 
    render :layout => 'labels_layout' 
end 

标签方法失败,这里就是在后台发生了:

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' 

该过程的其余部分工作正常,我可以看到PDF声音正在生成。我在这里错过了什么?

谢谢!

+0

你可以展示你是如何呼叫标签?表单发到哪里? – margo

+0

标签由pdfkit使用labels_invoices_url路由调用:'path = labels_invoices_url',然后'kit = PDFKit.new(path)'。我不确定你问的是表单发布到的地方。 – TheStrabusiness

+0

您必须明确地将参数传递给标签方法。 params散列只适用于你发布的方法,所以我猜表单POSTs到generate_multiple_pdfs。 – margo

回答

0

我想明确地传递参数或变量在几个方面,包括:

path = labels_invoices_url(@invoices)path = labels_invoices_url(params[:selected_invoices]

这两者给了我类似的错误。我尝试了不同的策略,并创建了两个索引页面上提交按钮:

<%= submit_tag "Print Selected Invoices" %> <%= submit_tag "Print Labels" %>

我把每个按钮的优势,发送在PARAMS自己的承诺,并与一个if/else语句statment到修改generate_multiple_pdfs方法检查params[:commit]

def generate_multiple_pdfs 
    if params[:commit] == "Print Labels" 
    @invoices = Invoice.find(params[:selected_invoices]) 
    render :labels, :layout => 'labels_layout' 
    else 
    #do the invoice pdfs 
    end 
end 

这不会生成PDF格式的标签,它需要两次点击,而不是之一,但它的工作现在。

如果有人知道如何通过PDFKit将变量或参数传递给我想要的,我真的很感谢他们的帮助。否则,它看起来像我将围绕文档,看看我错过了什么基础知识。

谢谢!

1

尝试改变path = labels_invoices_urlpath = labels_invoices_url(@invoices)

+0

谢谢,感谢您的回复。我已经试过这个,但它仍然给了我同样的错误'ActiveRecord :: RecordNotFound(找不到发票与'id'=):app/controllers/invoices_controller.rb:160:在'labels''我最终修复它以不同的方式。我会在一秒钟后发布。 – TheStrabusiness