我有两个相关模型: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