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: