2

我有两个相关的模型:InvoiceCurrency

Invoice belongs_to CurrencyCurrency has_many Invoices

我有一个表格,显示每张发票的列表,我可以按货币过滤它们。发票也有一个price字段,我有一个计算我显示的发票总价的方法。

我的问题是,当且仅当每张发票都具有相同的货币时,我才想显示总价。

我很确定有一种简单的方法可以实现这一点,但我找不到。

任何帮助将不胜感激。

4

2 回答 2

4

事实上,有很多方法可以实现这一点,例如,您可以通过这种方式检查它们是否都具有相同的货币:

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

或者

invoices.map {|inv| inv.currency_id}.uniq.length == 1
于 2013-01-24T15:41:24.447 回答
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?
于 2013-01-24T23:37:16.353 回答