Cannot convert string to integer error with arrays and hash

Ok so I am trying to read a hash of arrays and I seem to be getting a cannot convert string to integer error. Here is my code:

  <% @information['food']['servings'].each do |servings| %>   <% servings['serving'].each do |serving| %>     <%= serving['name'] %>     <br/>   <% end %> <% end %>

Here is what the hash looks like: @parsed_response={"food"=>{"name"=>"Chicken: Breast Quarters, rotisserie, no skin or wing (Boston Market)", "id"=>"42e5699f-79cd-436c-965b-90850b26a278", "servings"=>{"serving"=>[{"name"=>"serving (4.9 oz)", "nutrients"=>{"calcium"=>nil, "satfat"=>"1", "fat"=>"4", "carb"=>"2", "fiber"=>"0", "sugar"=>"1", "protein"=>"33", "sodium"=>"480", "cholesterol"=>"85", "calories"=>"170"}}, {"name"=>"oz", "nutrients"=>{"calcium"=>nil, "satfat"=>"0.2025", "fat"=>"0.81", "carb"=>"0.405", "fiber"=>"0", "sugar"=>"0.2025", "protein"=>"6.6825", "sodium"=>"97.2", "cholesterol"=>"17.2125", "calories"=>"34.425"}}, {"name"=>"g", "nutrients"=>{"calcium"=>nil, "satfat"=>"0.00714285714286", "fat"=>"0.0285714285714", "carb"=>"0.0142857142857", "fiber"=>"0", "sugar"=>"0.00714285714286", "protein"=>"0.235714285714", "sodium"=>"3.42857142857", "cholesterol"=>"0.607142857143", "calories"=>"1.21428571429"}}]}}}, @response=#<Net::HTTPOK 200 OK readbody=true>, @headers={"expires"=>["0"], "last-modified"=>["Fri, 27 Aug 2010 07:30:52 GMT"], "connection"=>["close"], "content-type"=>["application/xml"], "date"=>["Fri, 27 Aug 2010 07:30:52 GMT"], "server"=>["Apache"], "cache-control"=>["pre-check=0, post-check=0, max-age=0"], "pragma"=>["no-cache"], "transfer-encoding"=>["chunked"]}

Many thanks,

Jakx12

Try @information[0]['food'] etc etc, or iterate through @information with .each if you have multiple responses.

Ok so I am trying to read a hash of arrays and I seem to be getting a cannot convert string to integer error. Here is my code:

<% @information['food']['servings'].each do |servings| %> <% servings['serving'].each do |serving| %> <%= serving['name'] %> <br/> <% end %> <% end %>

Here is what the hash looks like: @parsed_response={"food"=>{"name"=>"Chicken: Breast Quarters,

I presume this is actually @information rather than @parsed_response (or the other way around).

rotisserie, no skin or wing (Boston Market)", "id"=>"42e5699f-79cd-436c-965b-90850b26a278", "servings"=>{"serving"=>[{"name"=>"serving (4.9 oz)",

serving is an array (the square bracket is a giveaway) so you must use an integer to index it not 'name' as you are doing. You can do serving[0]['name'] or use serving.each

Colin

CU wrote:

Try @information[0]['food'] etc etc, or iterate through @information with .each if you have multiple responses.

Thanks. However @information[0] doesnt work nor are there multiple responses. What do you think I should do?

Colin Law wrote:

Here is what the hash looks like: @parsed_response={"food"=>{"name"=>"Chicken: Breast Quarters,

I presume this is actually @information rather than @parsed_response (or the other way around).

rotisserie, no skin or wing (Boston Market)", "id"=>"42e5699f-79cd-436c-965b-90850b26a278", "servings"=>{"serving"=>[{"name"=>"serving (4.9 oz)",

serving is an array (the square bracket is a giveaway) so you must use an integer to index it not 'name' as you are doing. You can do serving[0]['name'] or use serving.each

Colin

So like this?   <% @information['food']['servings'].each do |servings| %>   <% servings['serving'].each do |serving| %>     <% serving.each do |s| %>     <% portions << s['name'] %>     <%= s['name'] %>     <br/>     <% end %>   <% end %>

Thankyou

Ah, I copied and pasted your inspect output and assigned it to a variable, and Rails recreated it as a hash, so it worked when I tried it.

Glad you came right.

I just realised i still get the error even with that code! HELP!!! :stuck_out_tongue:

Please quote the message you are replying to. Which code?

Please post the code again and the error along with which line the error is on. First though have a look yourself and try and work it out.

Colin

Colin Law wrote:

You need to be more exlicit about exactly what the problem is. I presume you have looked at collection_select docs and googled for examples and have understood those (if you don't understand the examples then persevere until you do). Find an example that is close to what you want and try and modify it for your requirement. If you cannot work out exactly what to do then post the best guess that you have for the code and explain what is going wrong. If your problem is a basic Ruby issue then study a good book on Ruby. The Pickaxe book is generally considered the one to get I think. Also you must know what html you are trying to generate, if you do not know that then study up on html.

Colin

Colin Law wrote:

So have you looked at the docs and googled for examples of collection_select and made sure you understand them, as I suggested?

Colin

Colin Law wrote:

I thought you were trying to use collection_select

Colin

Colin Law wrote:

Use collection_select, it does more for you.

By the way why have we got lots of Re:Re: in the subject? Are you not just replying to the previous post?

Colin

Colin Law wrote: