В вашем примере вы можете использовать метод find
для массива units
.
subtotal = 0.0
units = Unit.all
self.quote_items.order("area_id").each do |item|
if unit = units.find{|u| u.id == item.unit_id
subtotal += unit.highest_price(package)*item.quantity
end
end
sprintf("%.2f", Quote.add_margin(subtotal))
Но в этом случае вы можете использовать :include
.Это загрузит item.unit
для каждого элемента.
quote_items.order("area_id").include(:unit).each do |item|
if item.unit
subtotal += item.unit.highest_price(package) * item.quantity
end
end