Newbie: has_many


#1

I am sorry for the newbie question, but I am really stuck and I can’t
work it out. :frowning: Have 2 models. category and product (has_many and
belongs_to).

My routes.rb:
map.resources :categories do |category|
category.resources :products
end

index in category controller:
def index
@category = Category.find(params[:id])
@products = @category.products
end

and then in my index.rhtml:

<% for product in @products %>
<%= product.title %>…
<% end %>

it will end up with this error:
undefined method `title’ for #Class:0x54eb998

I am sure the title is column name in my table. I can create a new
product, edit it, delete it, but I am not able to show the data
properly.

Can anyone help me? Thanks in advance.
Peter


#2

On Feb 18, 2009, at 5:23 PM, Peter Killik wrote:

def index
@category = Category.find(params[:id])
@products = @category.products
end

and then in my index.rhtml:

<% for product in @products %>
<%= product.title %>…
<% end %>

Read:
http://blog.grayproductions.net/articles/the_evils_of_the_for_loop
and change to:

<% @products.each do |product| %>

it will end up with this error:
undefined method `title’ for #Class:0x54eb998

I am sure the title is column name in my table. I can create a new
product, edit it, delete it, but I am not able to show the data
properly.

Can anyone help me? Thanks in advance.
Peter

You’re saying/showing CategoryController, but do you mean
ProductsController?

Since the undefined ‘title’ is attributed to #Class:... and not
#Product:... do you have a naked title somewhere that’s being
interpreted as a method call on the anonymous view class? Is that the
correct line from the view?

-Rob

Rob B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#3

Rob B. wrote:

Read:
http://blog.grayproductions.net/articles/the_evils_of_the_for_loop
and change to:

<% @products.each do |product| %>

Thx Rob, I changed the for_loop and it works. THnaks.
Peter