2017-09-21 1 views
1

Je travaille pour construire un objet de données chartjs qui contient un certain nombre d'ensembles de données dynamique ... Dans mon contrôleur Ruby on Rails 5, je suis en train de ce qui suit:Rails, comment construire dynamiquement un ensemble de données Hash

chartJsObject = [] 

chartJsObject << { 
    label: "Label Stuff", 
    datasets: [] 
} 

i = 0 
num = 5 

while i < num do 
    chartJsObject.datasets << [rand(10), rand(10)] 
    i+=1 
end 

Cela se traduit par l'erreur suivante:

undefined method `datasets' for [{:label=>"Label Stuff", :datasets=>[]}]:Array 

Toutes les idées que je fais mal ici pour pouvoir faire une boucle à travers et remplir chartJsObject.datasets?

Merci

Répondre

2

Dans la première ligne que vous définissez chartJsObject comme un tableau:

chartJsObject = [] 

puis dans le second, vous poussez un objet de hachage en elle:

chartJsObject << { 
    label: "Label Stuff", 
    datasets: [] 
} #=> [{:label=>"Label Stuff", :datasets=>[]}] 

Maintenant, ce vous avez un tableau d'objets de hachage. Pour insérer les données dans datasets vous avez juste besoin d'accès à l'objet de hachage, probablement comme ceci:

i = 0 
num = 5 

while i < num do 
    chartJsObject[i][:datasets] << [rand(10), rand(10)] if chartJsObject[i] 
    i+=1 
end 
+0

grâce, mais cela semble être le même ensemble de données d'écraser. Il boucle 5 fois, mais ne renvoie qu'un jeu de données. Non 5 dans chartJsObject.datasets – AnApprentice

+0

Une idée pourquoi? Merci – AnApprentice

+1

Parce que vous pourriez écrire des ensembles de données dans un seul hachage au lieu d'insérer un autre hachage pour différents ensembles de données – Surya