2014-01-14 4 views
0

Быстрый огонь вопрос.подсчет значений во встроенном рубине

Если у меня есть список значений, и я не найду итоговое значение и не покажу его во встроенном рубине, как бы я это сделал.

<% @user.recipes.each do |i| %> 
    <% i.awards.each do |k| %> 
    <%= k.points %> 
    <% end %> 
<% end %> 

Это делает:

1 10 5 5 10 1 5 10 5 1 

с каждым номером (1, 5 или 10), являющегося значением из базы данных. Есть ли способ подсчитать это? Или было бы лучше создать отдельный механизм в контроллере, чтобы это исправить?

ответ

3
<%= i.awards.sum(:points) %> 

Ибо для суммы всех точек из всех рецептов:

<%= @user.recipes.map { |r| r.awards.sum(:points) }.sum %> 

Хотя это может быть разумным, чтобы сделать этот расчет в рамках модели. Вы удалите много дублирования таким образом, если вы используете его в нескольких взглядах.

UPDATE:

Согласно комментариях ниже, вы можете также попросить DB вычислить сумму для вас:

<%= @user.recipes.joins(:awards).sum('awards.points') %> 
+0

Абсолютный герой. Чем вы так много, это то, что мне нужно! На данный момент это должно быть хорошо. Если мне нужно сделать это в модели, я могу изменить ее позже. Знаете ли вы, как сделать этот расчет в модели? – MikeHolford

+0

Точно так же просто поместите его в свой класс 'User', который называется' total_recipe_points' или что-то еще, а затем вызовите '@ user.total_recipe_points' – Jon

+1

. Я бы предпочел, чтобы сумма всех точек из всех рецептов была нажата вниз к базе данных, я думаю. –

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