Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iterate through array of hashes in ruby

so if I have an array of hashes like so: (ruby beginner)

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}

]

how would i iterate through the array as well as to iterate through each hash to have something like this:

player1 = {display_name=>"rudy gay", "position"=>"SF"}

player2 = {display_name=>"darren collison", "position"=>"PG"}

Would it be something like

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

(assuming I have a player model)

Is there a better way to achieve this?

Thanks!

like image 633
meowmixplzdeliver Avatar asked Nov 03 '14 22:11

meowmixplzdeliver


People also ask

How to access array of hashes in Ruby?

In Ruby, the values in a hash can be accessed using bracket notation. After the hash name, type the key in square brackets in order to access the value.

Can you iterate through a hash Ruby?

Iterating over a HashYou can use the each method to iterate over all the elements in a Hash. However unlike Array#each , when you iterate over a Hash using each , it passes two values to the block: the key and the value of each element.

How to get value from array of hash in Ruby?

Accessing an array of hashes You can access the elements of an array of hashes by using array-based indexing to access a particular hash and keys to access values present in that hash.


1 Answers

Given your input:

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

If all of those keys (last_name, first_name, display_name) are present in the Player model, you can just:

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

Since create will take a hash of attributes to assign. But, even better, you don't even need to iterate:

Player.create(input)

ActiveRecord will go through them all if you give it an array of hashes.

like image 90
Nick Veys Avatar answered Nov 14 '22 22:11

Nick Veys