2010-08-09 5 views
0

dans une tentative de créer un modèle avec un tableau comme atribute, je fini par créer un tableau de hash comme ceci:clés de hachage accesing et les attributs de la vue

data1 = {} 
    data1[:name] = "Virtual Memory" 
    data1[:data] = @jobs.total_virtual_memory 
    data2 = {} 
    data2[:name] = "Memory" 
    data2[:data] = @jobs.total_memory 
    @data = [] 
    @data << data1 
    @data << data2 

qui remplit @data comme ceci:

[{:data=>[#<Job day: "2010-08-02">, #<Job day: "2010-08-04">], :name=>"Virtual Memory"}, {:data=>[#<Job day: "2010-08-02">, #<Job day: "2010-08-04">], :name=>"Memory"}] 

Cependant, je ne sais pas comment accéder à ces variables dans la vue. Alors que tu courir somethig comme:

for series in @data 
    series:name 
    for d in series:data 
     data:[Date, Value] 
    end  
end 

qui retourne quelque chose le long des lignes de:

Name1 
     Date1, Value1 
     Date2, Value 2, 
     Date3, Value 3, 
     Date4, Value 4, 
    Name2 
     Date1, Value 1, 
     Date2, Value 2, 
     Date3, Value 3, 
     Date4, Value 4, 

Répondre

0

Voici la vue:

<% for d in @data %> 
    { pointInterval: <%= 1.day * 1000 %>, 
     name:<%= "'#{d[:name]}'"%>, 
     pointStart: <%= 2.weeks.ago.at_midnight.to_i * 1000 %>, 
       data: [ 
      <% for chart in d[:data] %> 
      <%= "'[#{chart.day.to_time(:utc).to_i * 1000}, #{chart.data_attribute}],'" %> 
      <% end %> 

        ] 
    },          
    <% end %> 

Utilisez # {d [: nom] } pour accéder à la valeur de la clé "name" et utiliser d [: data] pour accéder au tableau, alors juste traverser le tableau comme s'il s'agissait d'un tableau normal

1

Cela devrait fonctionner:

<% for series in @data %> 
    <%= series[:name] %> 
    <% for d in series[:data] %> 
    <%= d.date %>, <%= d.value %> 
    <% end %> 
<% end %> 

Cependant, vous pouvez envisager d'utiliser une structure de données plus approprié au lieu de hashs. Une structure par exemple. Cela pourrait ressembler à ceci:

# in lib/JobData.rb: 
JobData = Struct.new(:name, :data) 

# in the controller: 
data1 = JobData.new("Virtual Memory", @jobs.total_virtual_memory) 
data2 = JobData.new("Memory", @jobs.total_memory) 
@data = [data1, data2] 

# in the view: 
<% for series in @data %> 
    <%= series.name %> 
    <% for d in series.data %> 
    <%= d.date %>, <%= d.value %> 
    <% end %> 
<% end %> 

Comme point de style: je for parce que vous avez utilisé for, mais en général il est considéré comme plus rubyish à utiliser each à la place.

+0

Bonjour Sepp2k! Merci beaucoup, je vais essayer d'utiliser Struct, il semble certainement beaucoup plus "rubyish" – jalagrange

+0

Considérant que votre vue est entièrement composée de scriptlets, vous devriez faire un helper qui édite le HTML et appelle l'assistant depuis la vue. – alternative

Questions connexes