Cannot convert string to integer error with arrays and hash

12 views
Skip to first unread message

Zack Nathan

unread,
Aug 27, 2010, 3:33:45 AM8/27/10
to rubyonra...@googlegroups.com
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
--
Posted via http://www.ruby-forum.com/.

CU

unread,
Aug 27, 2010, 4:05:08 AM8/27/10
to Ruby on Rails: Talk
Try @information[0]['food'] etc etc, or iterate through @information
with .each if you have multiple responses.

Zack Nathan

unread,
Aug 27, 2010, 4:13:43 AM8/27/10
to rubyonra...@googlegroups.com
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

unread,
Aug 27, 2010, 4:11:00 AM8/27/10
to rubyonra...@googlegroups.com
On 27 August 2010 08:33, Zack Nathan <li...@ruby-forum.com> wrote:
> 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

Zack Nathan

unread,
Aug 27, 2010, 4:20:18 AM8/27/10
to rubyonra...@googlegroups.com
Colin Law wrote:
> On 27 August 2010 08:33, Zack Nathan <li...@ruby-forum.com> 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

CU

unread,
Aug 27, 2010, 4:33:04 AM8/27/10
to Ruby on Rails: Talk
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.

Zack Nathan

unread,
Aug 27, 2010, 4:38:38 AM8/27/10
to rubyonra...@googlegroups.com
I just realised i still get the error even with that code! HELP!!! :P

Colin Law

unread,
Aug 27, 2010, 6:13:46 AM8/27/10
to rubyonra...@googlegroups.com
On 27 August 2010 09:38, Zack Nathan <li...@ruby-forum.com> wrote:
> I just realised i still get the error even with that code! HELP!!! :P

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

Zack Nathan

unread,
Aug 28, 2010, 5:44:06 AM8/28/10
to rubyonra...@googlegroups.com

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 Law

unread,
Aug 28, 2010, 6:30:14 AM8/28/10
to rubyonra...@googlegroups.com

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

Zack Nathan

unread,
Aug 28, 2010, 7:23:58 AM8/28/10
to rubyonra...@googlegroups.com
Colin Law wrote:
> On 28 August 2010 10:44, Zack Nathan <li...@ruby-forum.com> 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.

Colin Law

unread,
Aug 28, 2010, 8:30:32 AM8/28/10
to rubyonra...@googlegroups.com

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

Colin

Zack Nathan

unread,
Aug 28, 2010, 8:43:14 AM8/28/10
to rubyonra...@googlegroups.com
Colin Law wrote:
> On 28 August 2010 12:23, Zack Nathan <li...@ruby-forum.com> 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 Law

unread,
Aug 28, 2010, 8:56:14 AM8/28/10
to rubyonra...@googlegroups.com
On 28 August 2010 13:43, Zack Nathan <li...@ruby-forum.com> 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

Zack Nathan

unread,
Aug 28, 2010, 9:03:09 AM8/28/10
to rubyonra...@googlegroups.com

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

Jakx12.

Colin Law

unread,
Aug 28, 2010, 9:13:55 AM8/28/10
to rubyonra...@googlegroups.com

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

Zack Nathan

unread,
Aug 28, 2010, 9:21:30 AM8/28/10
to rubyonra...@googlegroups.com

Not sure to be honest..

Reply all
Reply to author
Forward
0 new messages