Beginner Help - Iterating and Displaying From Models with Relationship

This should probably be easy but for some reason I can’t get past a
simple routine. I have a model for Companies and for Applications. A
company has many applications. So in this instance I have a company
id and I want to find all applications associated with that company.
I tried the following:

<%= Company.find(1).applications.each { |app| app.name } %> in my
view.

This returns “#Application:0xb6736afc#<Application:
0xb672f1d0>#Application:0xb672f130#<Application:
0xb672ef50>#Application:0xb672ed34#<Application:
0xb672e924>#Application:0xb672e884” when the view is rendered.

I’m not really sure what this is, but it does have one entry for each
of my applications for that company. So I know it is creating the
right number of entries just not sure what the output means.

I’m sure I am doing something monumentally stupid but I can’t seem to
find any examples of this that return this output. Any help that can
be provided is very much appreciated.

Thank you!

On 22 Feb 2011, at 03:40, Ryan [email protected] wrote:

This should probably be easy but for some reason I can’t get past a
simple routine. I have a model for Companies and for Applications. A
company has many applications. So in this instance I have a company
id and I want to find all applications associated with that company.
I tried the following:

<%= Company.find(1).applications.each { |app| app.name } %> in my
view.

each returns the collection you iterated over. If you want the return
value to be the array containing the result of evaluating the block for
each object, then use map. Alternatively you can do

<% collection.each do |object| %>
<%= object.name %>
<% end %>

Fred

I am not at my computer, so I can’t help out with code.
Basically you need to dig one layer deeper. The above is an
array of Applications. Try to <%=raise Company.find(1).inspect %> to
display
the returned value/array. From there you can play around till it
satisfy your needs.

Hi Ryan,

Your loop is correct. The issue how erb is interpreting what you are
asking it to do. The = is telling erb to spit out the contest of the
array Company.find(1).applications.each without running the block it
has. There are two ways to get it to display what you want. Remove the
= and change your block to read { |app| puts app.name } or do as
Fredrick suggested and write you code like so:

<% Company.find(1).applications.each do |app| %>
<%= app.name %>
<% end %>

Thanks,
B.

On 22 February 2011 16:52, Bryan C. [email protected]
wrote:

Hi Ryan,

Hiya,
Can you not top-post, please. It makes it hard to know what you’re
exactly replying to. TIA.

There are two ways to get it to display what you want. Remove the
= and change your block to read { |app| puts app.name } or do as

That’s not gonna do much good, as “puts” is going to output on the
server console. The one way to do it is as Fred said.

Michael

Thank you very much everyone! Fred, your advise was spot on. Worked
like a charm!

<% Company.find(1).applications.each do |app| %>
<%= app.name %>
<% end %>

Perfecto!

Clint, thanks for the tip on the inspect function, I missed that. It
probably would have been the best way to debug and trial/error the
solution.

Once again thank you all for the help :slight_smile: