-1

我正在@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} *********************************************************" 
4

2 回答 2

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
于 2013-04-29T09:38:52.310 回答
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)
于 2013-04-29T06:56:04.373 回答