@model OR :model in a form_for

Hi Folks,

I want a form in a rails 3.0.10 app with form_for exactly I have 3
models

@apple, @basket, @table

class Apple
belongs_to :tables
belongs_to: baskets
end

class Basket
belongs_to :tables
has_many :apples
end

class Table
has_many :baskets
has_many :apples
end

MY QUESTION

For apples I have many color as well as for baskets I have many
different kinds of shapes

if I have the follow code in the index.html.erb file

<%= form_for :table do |f| %>

<%= f.collection_select(:basket, @basket, :id, :shape, {:prompt =>
true}) %>

<%= f.collection_select(:apple, @apple, :id, :color, {:prompt => true})
%>

<%= f.submit %>

<% end %>

*** appear the page correctly ***

meanwhile if I have the follow code

<%= form_for @table do |f| %>

<%= f.collection_select(:basket, @basket, :id, :shape, {:prompt =>
true}) %>

<%= f.collection_select(:apple, @apple, :id, :color, {:prompt => true})
%>

<%= f.submit %>

<% end %>

the page show the follow error page

////////////
undefined method `model_name’ for NilClass:Class

Extracted source (around line #1):

1: <%= form_for @table do |f|
////////////

change only the first line in the example I have <%= form_for @table do
|f| %> and not

<%= form_for :table do |f| %>

NOW

which is the different between

<%= form_for @table do |f| %>

and

<%= form_for :table do |f| %>

sorry for this post but I want to understand the Rails philosophy

thanks a lot anyway,

C

Is it all made with scaffolds? or what do you have in your controller?

Javier Q.

On 21 March 2012 00:27, Cluter V. [email protected] wrote:

end

true}) %>
meanwhile if I have the follow code

<% end %>

the page show the follow error page

////////////
undefined method `model_name’ for NilClass:Class

That means that @table is nil. This form cannot work if @table has
not been setup to be an object of appropriate type. :table is a
symbol used here to represent a type of object, @table is a variable
that must have been setup in the controller in order to use it in the
view.

Colin.

Colin

–
You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.

–
gplus.to/clanlaw

Thanks for all answer I don’t use the scaffold for that app

here is my table CONTROLLER

class TableController < ApplicationController

def index
@basket = Basket.find(:all)
@apple = Apple.find(:all)
end

def new
@table = Table.new
end
end

here my MODEL

class Table < ActiveRecord::Base

belongs_to :apples
belongs_to :baskets

end

maybe above you can see a logic error? or syntax error?

thanks anyway,

C

Colin L. wrote in post #1052589:

On 21 March 2012 00:27, Cluter V. [email protected] wrote:

end

true}) %>
meanwhile if I have the follow code

<% end %>

the page show the follow error page

////////////
undefined method `model_name’ for NilClass:Class

That means that @table is nil. This form cannot work if @table has
not been setup to be an object of appropriate type. :table is a
symbol used here to represent a type of object, @table is a variable
that must have been setup in the controller in order to use it in the
view.

Colin.

Colin

–
You received this message because you are subscribed to the Google G. “Ruby
on Rails: Talk” group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.

–
gplus.to/clanlaw

If you are going to use @table in index.html.erb (that is handled by def
index ) you have to add to the index method

def index

…
@table = Table.new
end

but I don’t know why does it works with the symbol and not with the
instance

Javier Q.

On Wed, Mar 21, 2012 at 2:47 PM, Cluter V. [email protected]
wrote:

Hi Javier,

you are right I just added it anyway when I reloaded the page now I have
another error

undefined method `basket’ for #<Table id: nil, created_at: nil,
updated_at: nil>

I’m not sure what are the fields of your Table … table :D, but
according
with your error it only has and id, and the timestamps(created_at,
update_at)

If you want to save inside Table the basket_id and the color_id then you
have to add columns for it, after that instead of the symbols :basket
and
:apple, write :basket_id and :apple_id (I’m not sure if thats correc
because I don’t usually use the form helpers from rails, I use a gem
simple_form).

You should take a look rails guides on views and forms

Javier Q.

Hi Javier,

you are right I just added it anyway when I reloaded the page now I have
another error

undefined method `basket’ for #<Table id: nil, created_at: nil,
updated_at: nil>

I edit the basket and apple controller with

def index

@basket = Basket.find(:all)

end

def index

@apple = Apple.find(:all)

end

but I have always the same error

thanks

C

Javier Q. wrote in post #1052696:

If you are going to use @table in index.html.erb (that is handled by def
index ) you have to add to the index method

def index

…
@table = Table.new
end

but I don’t know why does it works with the symbol and not with the
instance

Javier Q.

Hi,

I figured out this error

undefined method `basket’ for #<Table id: nil, created_at: nil,
updated_at: nil>

simply add two columns (apple & basket) in the table called Table :slight_smile:

now appear correctly the webpage with the drop down menu so

If you have in the app/views/table/new.html.erb

  1. <%= form_for @table do |f| %>
  2. <%= f.collection_select(:basket, @basket, :id, :shape, {:prompt =>
    true}) %>
  3. <%= f.collection_select(:apple, @apple, :id, :color, {:prompt =>
    true}) %>

it works but

A. in the model Table you have the follow code

def new

@apple = Apple.find(:all)
@Basket = Basket.find(:all)
@table = Table.new

end

B. in the table called ‘Table’ obviously you have 2 record ‘apple’ and
‘basket’

NOW

even if I don’t have the right code as letter A. and letter B. if I
write in the line 1.

<%= form_for :table do |f| %>

and not

<%= form_for @table do |f| %>

the page appear correctly and load also the data from apple & basket
table in the drop down menu

I don’t know why but is only a doubt to understand the difference
between a symbol and an instance

thanks a lot anyway

C