2013-04-29 44 views
-1

我使用循環[7,15,30, 60, 120].each do |num|中的不同值創建OpenStruct @dataos,但我只獲得最後一個。有沒有一種方法添加到我目前的散列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} *********************************************************" 

回答

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) 
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