2014-11-03 16 views
5

więc jeśli mam tablicę skrótów tak: (początkujący rubinowy)iterację tablicy mieszań w 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} 

] 

jaki sposób iterację tablicy jak iterację każdego hash mieć coś tak:

Gracz1 = {DISPLAY_NAME => "położenie" "Rudy Gay" => "SF"}

player2 = {DISPLAY_NAME => "Darren kolizję", "miejsce" => "PG" }

Czy to będzie som ething jak

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

(zakładając, że mam model Player)

Czy istnieje lepszy sposób osiągnięcia tego celu?

Dzięki!

+0

Ten kod jest poprawny, poza brakującym końcowym ')'. Jaki jest problem? Czy pojawia się błąd? –

+0

Cześć Simone, zastanawiam się, czy jest na to bardziej rubinowy sposób, albo jeśli jest coś bardziej wydajnego. – meowmixplzdeliver

+0

Sprawdź tę odpowiedź: http://stackoverflow.com/a/10022240/4178151. Możesz przekazać tablicę asocjacyjną bezpośrednio do metody create, aby wykonać jedną dużą wstawkę. – nikkon226

Odpowiedz

7

Biorąc pod uwagę Twój wkład:

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

Jeśli wszystkie z tych przycisków (last_name, first_name, DISPLAY_NAME) są obecne w modelu Player, można po prostu:

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

Od create zajmie skrót atrybutów do przypisania. Ale jeszcze lepiej, nie trzeba nawet iteracyjne:

Player.create(input) 

ActiveRecord będzie przejść przez nich wszystkich, jeśli dasz mu tablicę skrótów.

+0

Dziękujemy! Co jeśli chciałbym podzielić hasz pomiędzy moim modelem Gracza a moją tabelą złączeń (model Stat), więc Player.name = "darren collison", ale zapisać punkty, asysty i podobne rzeczy jako Stat.assist? (mam nadzieję, że to miało sens) Mam model Game, Player i Stat, z statem będącym tabelą łączenia pomiędzy grą a graczem. – meowmixplzdeliver

+0

Trudno to zaadresować w komentarzach, a to naprawdę zupełnie nowe pytanie. Zrób to, czytając [przewodnik stowarzyszeń AR] (http://guides.rubyonrails.org/association_basics.html) i prawdopodobnie będziesz dość blisko. Wszelkie inne szczegóły po prostu ponownie, a ktoś na pewno cię do końca drogi. –