2017-01-26 3 views
0

Ich versuche, einen verschachtelten (und damit sortiert) Array von Hashes wie so zu machen:Rails: Erstellen Sie ein verschachtelten Hash-Array-Typ Objekt

[{ stack: 'stack name', id: 1, 
    boxes: [{ 
     box: 'whatever box', 
     id: 1, 
     vars: [{ 
     var: 'some name', 
     id: 22, 
     }, 
     { var: 'another name', 
     id: 4 
     }] 
    }, { 
     box: 'another box', 
     id: 99, 
     vars: [{ 
     var: 'another', 
     id: 999 
     }] 
    }  
    }] 
}] 

Die Methode, die ich mit so habe komme weit ist diese, die nicht funktioniert, aber ich bin total stapeln, wie zu Nest diese Objekte ihre Hierarchie zu pflegen (a Stack viele Boxes haben, ein Box viele TemplateVariables haben.

master = [] 
@template.stacks.alphabetised.each_with_index do |stack, i| 
    master << { stack: stack.name, id: stack.id } 
    stack.boxes.indexed.each_with_index do |box, j| 
    master[i] = { box: box.name, id: box.id } 
    box.template_variables.indexed.each do |var| 
     master[i][j] = { var: var.name, id: var.id } 
    end 
    end 
end 
master 

Dies scheint nichts zurückzugeben, obwohl diese Objekte definitiv da sind (und ich weiß, dass meine Struktur auch ausgeschaltet ist). Mache ich etwas falsch?

+0

Die Syntax nicht korrekt für die erste ist. –

Antwort

1

Sie könnten map s verschachtelt verwenden:

################################################ 
# Initialization code. Different from yours. 
def stacks 
    Array.new(2){|i| "Stack #{i+1}"} 
end 

@box_id = 0 
def boxes 
    Array.new(2){ "Box #{@box_id += 1}"} 
end 

@var_id = 0 
def vars 
    Array.new(2){ "Var #{@var_id += 1}"} 
end 
################################################ 

stack_data = stacks.map.with_index do |stack,i| 
    box_data = boxes.map.with_index do |box,j| 
    var_data = vars.map.with_index do |var,k| 
     {var: var, id: k} 
    end 
    {box: box, id: j, vars: var_data} 
    end 
    {stack: stack, id: i, boxes: box_data} 
end 

require 'pp' 
pp stack_data 

Es gibt:

[{:stack=>"Stack 1", 
    :id=>0, 
    :boxes=> 
    [{:box=>"Box 1", 
    :id=>0, 
    :vars=>[{:var=>"Var 1", :id=>0}, {:var=>"Var 2", :id=>1}]}, 
    {:box=>"Box 2", 
    :id=>1, 
    :vars=>[{:var=>"Var 3", :id=>0}, {:var=>"Var 4", :id=>1}]}]}, 
{:stack=>"Stack 2", 
    :id=>1, 
    :boxes=> 
    [{:box=>"Box 3", 
    :id=>0, 
    :vars=>[{:var=>"Var 5", :id=>0}, {:var=>"Var 6", :id=>1}]}, 
    {:box=>"Box 4", 
    :id=>1, 
    :vars=>[{:var=>"Var 7", :id=>0}, {:var=>"Var 8", :id=>1}]}]}] 
+0

Das ist _wesome_, danke! –

Verwandte Themen