Arrays 在RubyonRails3中从模型中的方法返回数组
我有一种方法可以计算出欠作者的一笔钱 它的工作原理如下:Arrays 在RubyonRails3中从模型中的方法返回数组,arrays,ruby-on-rails-3,Arrays,Ruby On Rails 3,我有一种方法可以计算出欠作者的一笔钱 它的工作原理如下: calculate_royalty(object_id) 现在,我在一个视图中使用它,循环浏览每个作者的产品,并给出一个数字。像这样: <%= @author.products.each do |product| %> <%= @author.calculate_royalty(product.id) %> <% end %> 但是数组只是作为该作者的产品对象的散列返回。我想一旦我在数组中有了值
calculate_royalty(object_id)
现在,我在一个视图中使用它,循环浏览每个作者的产品,并给出一个数字。像这样:
<%= @author.products.each do |product| %>
<%= @author.calculate_royalty(product.id) %>
<% end %>
但是数组只是作为该作者的产品对象的散列返回。我想一旦我在数组中有了值,我就可以使用array.inject将它们全部相加。好吧,如果calculate\u royalty只返回一个数字,那么在你的循环中你没有将它分配给任何东西,它只会返回并消失。尝试将每个版税推入一个数组,并在最后将其相加,如下所示:
def total_author_royalties
royalties = []
products.each do |p|
royalties << calculate_royalty(p.id)
end
royalties.sum
end
这很有效。在这种情况下,为什么map与.inject相比是一个合适的选择?我个人认为这只是我的一个偏好。从心理上讲,我觉得在数组中收集ID并求和(即使是两个不同的操作)比编写一个不断向不断增长的和中添加数字的注入方法更有意义。我觉得我建议的代码更容易阅读,但我明白这是一种偏好。我认为在这种情况下,两种答案都是合适的。
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