将哈希值推入循环导轨中的数组

问题描述

我试图在遍历每个循环的同时向数组添加哈希。这是我的控制器代码:我苦苦挣扎的那一行是在每个循环中设置@royaltiesbychannel变量:
def royalty(isbn)  
 sales_hash_by_channel = Sale.find_all_by_isbn_id(@isbn).group_by(&:channel_id)
 sales_hash_by_channel.each do |ch_id,sale_array|
  @royaltiesbychannel = Array.new() 
  value_total_by_channel = sale_array.sum(&:value) 
  quantity_total_by_channel = sale_array.sum(&:quantity)      
   @isbn.rules.each do |rule|
   next unless rule.channel_id == ch_id   
   case quantity_total_by_channel
   when 0..5000  
   @royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}
    # (some other case-when statements)             
  end
 end
end
在控制台中,当我将ch_id和值设置为新值并将新值推入数组时:
@royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}
我得到了很多哈希值:
[{1=>100000.0},{2=>3000.0}] 
但是,当我在视图中执行@ royaltiesbychannel.inspect时,只得到一对键值对:
[{2=>3000.0}]
对于参考:
@royaltiesbychannel.class = Array
@royaltiesbychannel.class = 1
@sales_hash_by_channel.class = Hash
@sales_hash_by_channel.size = 2
@isbn.rules.size = 4
因此,看起来对数组的推送是覆盖而不是添加。我究竟做错了什么?我是否完全错失了循环和.push的工作原理?提前谢谢了。     

解决方法

@royaltiesbychannel
初始化位于第一个循环内,因此,每次重新启动该循环时,它将清空该数组。将其移到循环之外,您应该得到想要的结果。
def royalty(isbn)
  @royaltiesbychannel = Array.new()
  sales_hash_by_channel = Sale.find_all_by_isbn_id(@isbn).group_by(&:channel_id)
  sales_hash_by_channel.each do |ch_id,sale_array|
    value_total_by_channel = sale_array.sum(&:value) 
    quantity_total_by_channel = sale_array.sum(&:quantity)      
    @isbn.rules.each do |rule|
      next unless rule.channel_id == ch_id   
      case quantity_total_by_channel
      when 0..5000  
        @royaltiesbychannel = @royaltiesbychannel << {ch_id => value_total_by_channel * 0.5}
        # (some other case-when statements)             
      end
    end
  end
    ,您正在循环中初始化数组:
@royaltiesbychannel = Array.new()
每次都会重新初始化它,因此您只会得到一个结果。将其移出每个循环。     ,您要在每次迭代过程中都将ѭ5设置为ѭ5,而不是ѭ9,而不是在该循环之外对它进行一次初始化?     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...