我有两个相关模型:Invoice
和Currency
。
Invoice belongs_to Currency
和Currency has_many Invoices
我有一个表格,显示每张发票的清单,我可以按货币过滤它们。发票还有一个price
字段,我有一个计算我显示的发票总价的方法。
我的问题是,当且仅当每张发票都有相同的货币时,我才想显示总价。
我很确定有一种简单的方法可以实现这一点,但我无法找到它。
非常感谢任何帮助。
答案 0 :(得分:4)
invoices.reject {|inv| inv.currency_id == invoices[0].currency_id}.empty?
或
invoices.map {|inv| inv.currency_id}.uniq.length == 1
答案 1 :(得分: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?