2014-11-03 93 views
5

,所以如果我有散列的數組,像這樣:(紅寶石初學者)迭代通過紅寶石哈希陣列

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} 

] 

如何將我整個數組循環以及通過每個哈希迭代有什麼東西像這樣:

PLAYER1 = {DISPLAY_NAME => 「蓋伊」, 「位置」=> 「SF」}

player2 = {DISPLAY_NAME => 「科裏森」, 「位置」=> 「PG」 }

它會是索姆ething像

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

(假設我有一個播放模式)

有沒有更好的方式來實現這一目標?

謝謝!

+0

該代碼是正確的,除了丟失的''''''。問題是什麼?你有沒有收到任何錯誤? – 2014-11-03 22:22:40

+0

嗨西蒙,只是想知道是否有一個更紅寶石的方式來做到這一點,或者如果有更有效的東西。 – meowmixplzdeliver 2014-11-03 22:24:16

+0

看看這個答案:http://stackoverflow.com/a/10022240/4178151。您可以將該散列數組直接傳遞給create方法以執行一個大插入操作。 – nikkon226 2014-11-03 22:29:39

回答

7

鑑於你輸入:

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

如果這些鍵(姓氏,FIRST_NAME,DISPLAY_NAME)是存在於Player模型,你可以:

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

由於create將採取要分配的屬性的哈希值。但是,甚至更好,你甚至都不需要遍歷:

Player.create(input) 

的ActiveRecord將通過所有這些,如果你給它的哈希值的數組。

+0

謝謝!如果我想分割我的玩家模型和我的連接表(Stat模型)之間的哈希值,那麼Player.name =「darren collison」但是將這些點,輔助和類似的東西保存爲Stat.assist? (希望有道理)我有Game,Player和Stat模型,stat是遊戲和玩家之間的連接表。 – meowmixplzdeliver 2014-11-03 22:44:24

+0

很難在評論中解決這個問題,而這完全是一個新問題。試一試,閱讀[AR協會指南](http://guides.rubyonrails.org/association_basics.html),你可能會非常接近。任何其他細節只需發佈一次,有人肯定會讓你休息。 – 2014-11-03 23:11:22