我正在使用循环@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} *********************************************************"
答案 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