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!
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.
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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With