@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