2014-11-03 13 views
5

così se ho un array di hash in questo modo: (ruby principianti)iterare attraverso array di hash in Ruby

input = [ 

{"last_name"=>"Gay", "first_name"=>"Rudy", "display_name"=>"Rudy Gay", "position"=>"SF", "minutes"=>39, "points"=>25, "assists"=>6}, 
{"last_name"=>"Collison", "first_name"=>"Darren", "display_name"=>"Darren Collison", "position"=>"PG", "minutes"=>39, "points"=>14, "assists"=>4} 

] 

come faccio a scorrere la matrice, nonché per scorrere attraverso ogni hash per avere qualcosa in questo modo:

player1 = {display_name =>, "posizione" "Rudy Gay" => "SF"}

player2 = {display_name => "Darren Collison", "posizione" => "PG" }

Sarebbe som ething come

input.each do |x| 
Player.create(name: x['display_name'], position: x['position'] 
end 

(supponendo che ho un modello di giocatore)

C'è un modo migliore per raggiungere questo obiettivo?

Grazie!

+0

Questo codice è corretto, a parte il trailing mancante ')'. Qual è il problema? Stai ricevendo qualche errore? –

+0

Ciao Simone, mi chiedo solo se c'è un modo più rubino per farlo, o se c'è qualcosa di più efficiente. – meowmixplzdeliver

+0

Dai un'occhiata a questa risposta: http://stackoverflow.com/a/10022240/4178151. È possibile passare tale array di hash direttamente al metodo di creazione per creare un unico grande inserto. – nikkon226

risposta

7

dato il vostro contributo:

input = [ 
    { "last_name"=>"Gay", ... }, 
    { "last_name"=>"Collison", ...} 
] 

Se tutte quelle chiavi (cognome, first_name, DISPLAY_NAME) sono presenti nel modello Player, si può solo:

input.each do |x| 
    Player.create(x) 
end 

Dal create avrà un hash di attributi da assegnare. Ma, ancora meglio, non è nemmeno bisogno di iterare:

Player.create(input) 

ActiveRecord passerà attraverso tutti loro se si dà una serie di hash.

+0

Grazie! Cosa accadrebbe se volessi suddividere l'hash tra il mio modello Player e la mia tabella di join (modello Stat) in modo che Player.name = "darren collison" ma salvi punti, assist e cose del genere come Stat.assist? (spero che abbia senso) Ho Game, Player e Stat model, con la stat che è il tavolo di join tra gioco e giocatore. – meowmixplzdeliver

+0

Difficile affrontarlo nei commenti, ed è davvero una nuova domanda del tutto. Fai un tentativo, leggendo [la guida delle associazioni AR] (http://guides.rubyonrails.org/association_basics.html) e probabilmente ti sarai avvicinato. Qualsiasi altro dettaglio sarà pubblicato di nuovo e qualcuno sicuramente ti farà fare il resto. –

Problemi correlati