我有兩個相關模型:Invoice
和Currency
。查找對象集合是否具有給定屬性的相同值
Invoice belongs_to Currency
和Currency has_many Invoices
我有顯示每個發票的名單表,我能夠通過貨幣來進行篩選。發票也有一個price
字段,我有一個方法可以計算我顯示的發票的總價格。
我的問題是,我想顯示總價,當且僅當每張發票具有相同的貨幣。
我很確定有一個簡單的方法來實現這個,但我找不到它。
任何幫助將不勝感激。
我有兩個相關模型:Invoice
和Currency
。查找對象集合是否具有給定屬性的相同值
Invoice belongs_to Currency
和Currency has_many Invoices
我有顯示每個發票的名單表,我能夠通過貨幣來進行篩選。發票也有一個price
字段,我有一個方法可以計算我顯示的發票的總價格。
我的問題是,我想顯示總價,當且僅當每張發票具有相同的貨幣。
我很確定有一個簡單的方法來實現這個,但我找不到它。
任何幫助將不勝感激。
其實有很多方法可以做到這一點,例如,你可以檢查是否所有的人都有相同的貨幣是這樣的:
invoices.reject {|inv| inv.currency_id == invoices[0].currency_id}.empty?
或
invoices.map {|inv| inv.currency_id}.uniq.length == 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?
這正是我問自己的問題。謝謝你的提示。 – siekfried
我會測試'inv.currency_id'而不是問Rails的每一個貨幣作爲Ruby對象轉換,然後讓它們的ID。生成少一點的DB查詢 – MrYoshiji
當然。現在修好! –
它的工作原理,非常感謝! – siekfried