从Ruby on Rails 3中的模型中的方法返回数组

时间:2011-01-22 20:32:57

标签: arrays ruby-on-rails-3

我有一种方法可以解决欠作者的一些roylaties。

它的工作原理如下:

calculate_royalty(object_id)

现在,我正在视图中使用它并循环浏览每个作者的产品并吐出一个数字。像这样:

<%= @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 个答案:

答案 0 :(得分:2)

好吧,如果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