[英]How to organize big block method in to small methods in ruby
在我的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>
我該如何解決這個問題?
您需要使用局部變量:
def export
CSV.generate do |csv|
@csv = csv
generate_invoice_headers
generate_invoices
end
end
然后將您的csv
調用更改為@csv
另一種進行方法:將參數傳遞給方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.