-1

@dataosloopとは異なる値でOpenStruct を作成しています[7,15,30, 60, 120].each do |num|が、最後の値しか取得できませんでした。現在のハッシュに追加してhashsproductsOpenStruct を埋める方法はありますか? これが私のコードです:

@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 に答える