2013-01-24 33 views
2

我有兩個相關模型:InvoiceCurrency查找對象集合是否具有給定屬性的相同值

Invoice belongs_to CurrencyCurrency has_many Invoices

我有顯示每個發票的名單表,我能夠通過貨幣來進行篩選。發票也有一個price字段,我有一個方法可以計算我顯示的發票的總價格。

我的問題是,我想顯示總價,當且僅當每張發票具有相同的貨幣。

我很確定有一個簡單的方法來實現這個,但我找不到它。

任何幫助將不勝感激。

回答

4

其實有很多方法可以做到這一點,例如,你可以檢查是否所有的人都有相同的貨幣是這樣的:

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

invoices.map {|inv| inv.currency_id}.uniq.length == 1 
+3

我會測試'inv.currency_id'而不是問Rails的每一個貨幣作爲Ruby對象轉換,然後讓它們的ID。生成少一點的DB查詢 – MrYoshiji

+0

當然。現在修好! –

+0

它的工作原理,非常感謝! – siekfried

1

最直接的方式來問一個集合中的所有內容是否相同是問所有元素是否等於第一個:

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

如果你做這件事情很多,可以考慮擴展可枚舉有一個方便的方法:

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

invoices.map(&:currency_id).all_same? 
+0

這正是我問自己的問題。謝謝你的提示。 – siekfried

相關問題