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