簡體   English   中英

如何在Ruby中將大塊方法組織成小方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM