我有一种方法可以解决欠作者的一些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将它们全部添加起来。
答案 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