2

と の 2 つの関連モデルがInvoiceありCurrencyます。

Invoice belongs_to CurrencyCurrency has_many Invoices

すべての請求書のリストを表示するテーブルがあり、通貨でフィルターすることができます。請求書にもpriceフィールドがあり、表示する請求書の合計金額を計算するメソッドがあります。

私の問題は、すべての請求書の通貨が同じである場合にのみ、合計金額を表示したいということです。

これを達成する簡単な方法があると確信していますが、見つけることができません。

どんな助けでも大歓迎です。

4

2 に答える 2

4

実際、それを達成する方法はたくさんあります。たとえば、次の方法ですべての通貨が同じかどうかを確認できます。

invoices.reject {|inv| inv.currency_id == invoices[0].currency_id}.empty?

また

invoices.map {|inv| inv.currency_id}.uniq.length == 1
于 2013-01-24T15:41:24.447 に答える
2

コレクション内のすべてが同じかどうかを確認する最も簡単な方法は、すべての要素が最初の要素と等しいかどうかを確認することです。

invoices.all?{ |inv| inv.currency_id == invoices.first.currency_id }

このことを頻繁に行う場合は、便利なメソッドを使用して拡張 Enumerable を検討することができます。

module Enumerable
  def all_same?
    v = first
    all? {|e| e == v}
  end
end

invoices.map(&:currency_id).all_same?
于 2013-01-24T23:37:16.353 に答える