在我的ruby on rails应用程序中,我有一个简单的类,它将发票转换为csv格式:
require 'csv'
class InvoiceCsvExporter
def initialize(invoices)
@invoices = invoices
end
def export
CSV.generate do |csv|
generate_invoice_headers
generate_invoices
end
end
private
def generate_invoice_headers
csv << ["Invoice number", "Company", "Customer", "State", "Invoice date",
"Delivery date", "Subtotal", "Total", "Tax", "Offer", "Contract"]
end
def generate_line_item_headers
csv << ["Line Items:"]
csv << ["Product", "Description", "Quantity", "Unit price", "Discount type", "Discount", "Amount"]
end
def generate_invoices
@invoices.each do |invoice|
csv << []
csv << [invoice.format_id, invoice.company.name, invoice.customer.fullname, invoice.aasm_state,
invoice.invoice_date, invoice.delivery_date, invoice.subtotal.round(2), invoice.total.round(2),
invoice.tax, invoice.invoice_offer, invoice.invoice_contract]
generate_line_item_headers
generate_line_item(invoice)
end
end
def generate_line_item(invoice)
invoice.line_items.each do |line_item|
csv << [line_item.product.name, line_item.description, line_item.quantity,
line_item.unit_price, line_item.discount_type, line_item.discount_value, line_item.total_price.round(2)]
end
csv << []
end
end
在我的导出方法中,我尝试使用此generate_invoice_headers方法,但它给了我一个错误:
undefined local variable or method `csv' for #<InvoiceCsvExporter:0x007f6a255ef218>
我该如何处理这个问题?
答案 0 :(得分:2)
您需要使用本地变量:
def export
CSV.generate do |csv|
@csv = csv
generate_invoice_headers
generate_invoices
end
end
然后将csv
来电更改为@csv
另一种继续方式:将参数传递给方法。