Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在RubyonRails3中从模型中的方法返回数组_Arrays_Ruby On Rails 3 - Fatal编程技术网

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