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’] %>


<% 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.

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?

On 27 August 2010 08:33, Zack N. [email protected] 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

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:

Colin L. wrote:

On 27 August 2010 08:33, Zack N. [email protected] 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’] %>


<% end %>
<% end %>

Thankyou

On 27 August 2010 09:38, Zack N. [email protected] wrote:

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 L. wrote:

On 27 August 2010 09:38, Zack N. [email protected] wrote:

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

Its ok, I worked it out late last night, thanks though! But how would I
put the display name and then the ids into a collection for a
collection_select menu. Im stuck on this because I only know how to put
data into a one dimensional array in ruby at the moment.

Thanks,

zack.

Colin L. wrote:

On 28 August 2010 10:44, Zack N. [email protected] wrote:

Colin

Its ok, I worked it out late last night, thanks though! But how would I
put the display name and then the ids into a collection for a
collection_select menu. Im stuck on this because I only know how to put
data into a one dimensional array in ruby at the moment.

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

Thanks. Yeah i need a collection_select (a drop down menu in html) that
will have the serving name as the name and also as the value. Now I dont
know how I would do this in ruby, but I know how I would do this in
other languages. That is my question.

Thanks,

jakx12.

On 28 August 2010 10:44, Zack N. [email protected] wrote:

Colin

Its ok, I worked it out late last night, thanks though! But how would I
put the display name and then the ids into a collection for a
collection_select menu. Im stuck on this because I only know how to put
data into a one dimensional array in ruby at the moment.

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

On 28 August 2010 12:23, Zack N. [email protected] wrote:

presume you have looked at collection_select docs and googled for
Colin

Thanks. Yeah i need a collection_select (a drop down menu in html) that
will have the serving name as the name and also as the value. Now I dont
know how I would do this in ruby, but I know how I would do this in
other languages. That is my question.

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

Colin

On 28 August 2010 13:43, Zack N. [email protected] wrote:


of course! I have found this snippet of code and im trying to get it to
work:
<%= select(“group_users”, “group_id”, @groups.collect {|p| [
p.group.name, p.group.id ] }, { :include_blank => true }) %>

But i cant seem to get it to work at the moment.

I thought you were trying to use collection_select

Colin

Colin L. wrote:

On 28 August 2010 12:23, Zack N. [email protected] wrote:

presume you have looked at collection_select docs and googled for
Colin

Thanks. Yeah i need a collection_select (a drop down menu in html) that
will have the serving name as the name and also as the value. Now I dont
know how I would do this in ruby, but I know how I would do this in
other languages. That is my question.

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

Colin

of course! I have found this snippet of code and im trying to get it to
work:
<%= select(“group_users”, “group_id”, @groups.collect {|p| [
p.group.name, p.group.id ] }, { :include_blank => true }) %>

But i cant seem to get it to work at the moment.

Colin L. wrote:

On 28 August 2010 13:43, Zack N. [email protected] wrote:


of course! I have found this snippet of code and im trying to get it to
work:
�<%= select(“group_users”, “group_id”, @groups.collect {|p| [
p.group.name, p.group.id ] }, { :include_blank => true }) %>

But i cant seem to get it to work at the moment.

I thought you were trying to use collection_select

Colin

So did I until I found this. Whichever one works is fine with me :stuck_out_tongue: !

Jakx12.

Colin L. wrote:

On 28 August 2010 14:03, Zack N. [email protected] wrote:

I thought you were trying to use collection_select

Colin

So did I until I found this. Whichever one works is fine with me :stuck_out_tongue: !

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

Not sure to be honest…

On 28 August 2010 14:03, Zack N. [email protected] wrote:

I thought you were trying to use collection_select

Colin

So did I until I found this. Whichever one works is fine with me :stuck_out_tongue: !

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