2014-01-30 2 views
0

У меня есть expenses, у которых есть столбцы: :quantity и unitcost. Общая сумма расходов составляет :quantity * unit cost.Rails сумма двух значений, умноженных вместе

woassetshave_many :expenses.

Я хочу показать общее количество для каждого asset в списке индексов asset.

Это работает:

<% expensetotal = 0 %> 
    <% woasset.expenses.each do |expense| %> 
     <% expensetotal = expensetotal + (expense.quantity.to_i * expense.unitcost) %> 
    <% end %> 
    <td><%= expensetotal %></td> 

Но есть лучший способ?

Я попытался определения expense total в expense модели, как это:

def expense_amount 
"#{self.quantity} #{self.unit_price}" 
end 

Тогда это в индексе:

<%= woasset.expenses.sum(:expense_amount) 

Но это не сработало.

Спасибо за помощь

+1

Что бы это значило подвести строку, содержащую два числа ? В любом случае, почему бы не заполнить общую сумму расходов по созданию/обновлению/сохранению/независимо? –

+0

Возможно, вы также можете сделать это непосредственно в базе данных с помощью агрегатных функций. Вы должны это изучить, потому что в общем случае быстрее позволить БД работать, а затем возвращать ответ, а также получать данные, а затем выполнять работу на сервере. – MrDanA

+0

Это хорошие альтернативы - спасибо – Reddirt

ответ

0

Это должно работать

<td><%= woasset.expenses.map{|e| e.quantity * e.unitcost}.reduce(:+) %></td> 

Конечно, это лучше, чтобы извлечь это модель

class Woasset 
    def total_expense 
    expenses.map{|e| e.quantity * e.unitcost}.reduce(:+) 
    end 
end 

<%= woasset.total_expense %> 
+0

Спасибо за помощь! – Reddirt

Смежные вопросы