0

私はこの状況を持っています:

skeleton = 
{
        "timeline" => 
        { 
            "data" => []
        }
}

template = 
{
        "A" => "",
        "B" => "",
        "C" => "",
}

コントローラーから、ハッシュの配列を返すクエリを作成します。

@cdr = Cdr.select("start, end, clid")

次に、配列を反復処理して「テンプレート」ハッシュ フィールドを設定し、最後のステップで、このハッシュを「スケルトン」ハッシュに属する配列に追加します。

@cdr.each do |cdr|
        template["A"] = cdr.start
        template["B"] = cdr.end
        template["C"] = cdr.clid
        skeleton["timeline"]["data"] << template
    end

したがって、期待される結果は次のとおりです。

skeleton = 
{
        "timeline" => 
        { 
            "data" => [
               {
               "A" => "sample1",
               "B" => "sample2",
               "C" => "sample3",
               },
               {
               "A" => "sample4",
               "B" => "sample5",
               "C" => "sample6",
               }
            ]
        }
}

しかし、私が得ている実際の結果は次のとおりです。

skeleton = 
{
        "timeline" => 
        { 
            "data" => [
               {
               "A" => "sample1",
               "B" => "sample2",
               "C" => "sample3",
               },
               {
               "A" => "sample1",
               "B" => "sample2",
               "C" => "sample3",
               }
            ]
        }
}

配列内のすべてのエントリには同じデータが含まれます。なんで?

4

1 に答える 1

2

サイクルごとに新しいテンプレート配列を作成してみてください。キーとして使用されている間にキーの値を変更することはできないと思います。

@cdr.each do |cdr|
    temp_inst = template.clone
    temp_inst["A"] = cdr.start
    temp_inst["B"] = cdr.end
    temp_inst["C"] = cdr.clid
    skeleton["timeline"]["data"] << temp_inst
end
于 2012-04-15T23:06:37.763 に答える