在rails中的循环内添加数据到hash

时间:2013-04-29 06:38:26

标签: ruby-on-rails

我正在使用循环@dataos中的不同值创建一个OpenStruct [7,15,30, 60, 120].each do |num|,但我只得到了最后一个。是否有方法添加到我当前的哈希hashsproducts然后填充OpenStruct?这是我的代码:

@dataos = OpenStruct.new()
[7,15,30, 60, 120].each do |num| 
  products = Product.where(:id => prod.id).sort_by(&:date_for).take(num)   
  hashsproducts = ({
    "series-#{num}" => get_data(products, :field1, 1.minute.to_f, 50),
    "collects-#{num}" => get_data(products, :field2, 1, 48),
    .…
    ….
  })
  @dataos = (hashscores)       
end
p "********** #{@dataos} *********************************************************" 

2 个答案:

答案 0 :(得分:0)

每次在循环中都会覆盖hashsproducts。

试试这个

hashsproducts = {}
[7, 15, 30, 60, 120].each do |num|
  products = Product.where(:id => prod.id).sort_by(&:date_for).take(num)   
  hashsproducts["series-#{num}"] = get_data(products, :field1, 1.minute.to_f, 50)
  hashsproducts["collects-#{num}"] = get_data(products, :field2, 1, 48)
end

@dataos = OpenStruct.new(hashsproducts)

答案 1 :(得分:0)

需要每个产品的密钥否则您应该使用一系列哈希值。

尝试使用产品密钥哈希:

hashsproducts = {}
[7, 15, 30, 60, 120].each do |num|
  products = Product.where(:id => prod.id).sort_by(&:date_for).take(num)
  hashproducts[num]= {}
  hashsproducts[num]["series-#{num}"] = get_data(products, :field1, 1.minute.to_f, 50)
  hashsproducts[num]["collects-#{num}"] = get_data(products, :field2, 1, 48)
end

@dataos = OpenStruct.new(hashsproducts)

或者这是哈希数组:

hashsproducts = {}
result = []
[7, 15, 30, 60, 120].each do |num|
  products = Product.where(:id => prod.id).sort_by(&:date_for).take(num)
  hashsproducts["series-#{num}"] = get_data(products, :field1, 1.minute.to_f, 50)
  hashsproducts["collects-#{num}"] = get_data(products, :field2, 1, 48)
  result << hashproducts
end