2014-11-03 92 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