2017-01-22 10 views
0

ハッシュの配列を作りたいと思います。しかし、問題は最初の反復の後にコードが次の行に移動したときに、配列の内容を直接置き換えます。最初の反復iはハッシュの配列が配列に直接データをオーバーライドしています

@item_name = [{:name=>"usman", :desc=>"sample ", :unit_price=>100}] 

とすぐに次の行がitem[:name] = Invoiceinfo.find(@invoiceinfo.id).item.name を実行した後、それを直接@item_name変更(名前の変数) を実行すると、このデータがあるとした後

@item_name =[] 
item = {} 
@invoiceinfo.each do |invoice| 
    item[:name] = Invoiceinfo.find(@invoiceinfo.id).item.name 
    item[:desc] = Invoiceinfo.find(@invoiceinfo.id).desc 
    item[:unit_price] = Invoiceinfo.find(@invoiceinfo.id).unit_price 
    byebug 
    @item_name.push (item) 
end 

この

は私が を取得していますものです @ item_nameの内容が変更されました

@item_name = [{:name => "next_name"、:desc => "sample"、:unit_price => 100}]

助けていただければ幸いです。あなたはRubyコードにルビーのパラダイムとベストプラクティスを使用することを検討している場合 Thannks

+0

これは良い答えですが、間違っていることを明確にするために、値を繰り返し同じキーに再割り当てするだけです。 – OneNeptune

答えて

4

この

@item_name = [] 
@invoiceinfo.each do |invoice| 
    invoice_info = Invoiceinfo.find(@invoiceinfo.id) 

    item = {} 
    item[:name] = invoice_info.item.name 
    item[:desc] = invoice_info.desc 
    item[:unit_price] = invoice_info.unit_price 

    @item_name.push(item) 
end 
+0

ありがとう、私はハッシュを再初期化していませんでした。 –

+0

正確に。そして私は反復のための3つのSQLクエリを作成しました:)あなたは大歓迎です。 – Ursus

+0

3番目のコード行をボーナスとして提供してくれてありがとう。 –

4

のようなものを試してみてください、この間違いは、将来的に発生しません。

@item_name = @invoiceinfo.each_with_object([]) do |invoice, acc| 
    invoice_info = Invoiceinfo.find(@invoiceinfo.id) 

    acc.push(
    name: invoice_info.item.name, 
    desc: invoice_info.desc 
    unit_price: invoice_info.unit_price 
) 
end 
+0

経済的で、非常によく読んでいます。 –

関連する問題