Возвращение массива из метода в модели в Ruby on Rails 3 - PullRequest
1 голос
/ 22 января 2011

У меня есть метод, который накапливает сумму, причитающуюся автору.просматривайте и просматривайте произведения каждого отдельного автора и выплевывая число.Вот так:

<%= @author.products.each do |product| %>
  <%= @author.calculate_royalty(product.id) %>
<% end %>

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

def total_author_royalties
   products do |p|
    calculate_royalty(p.id)
   end
end

Но массив просто возвращается как хеш объектов продукта для этого автора.Я понял, что когда у меня есть значения в массиве, я могу использовать Array.inject, чтобы сложить их все.

1 Ответ

2 голосов
/ 22 января 2011

Что ж, если Calculate_royalty просто возвращает число, то в вашем цикле вы не назначаете его ни для чего, оно просто возвращается и исчезает.Попробуйте вставить каждое роялти в массив и суммировать их в конце следующим образом:

def total_author_royalties
   royalties = []
   products.each do |p|
     royalties << calculate_royalty(p.id)
   end
   royalties.sum
end

или более краткую версию:

def total_author_royalties
  products.map{|p| calculate_royalty(p.id)}.sum
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...