NameError, uninitialized constant States

I’m completely new to Ruby and Rails and could use some help resolving
an issue. I have a list method that is supposed to show the titles and
states(status) of requests, but I get an error from this piece of code:

 <td><%= change.states.state %></td>

The error is:

c:/ruby/lib/ruby/gems/1.8/gems/activesupport-1.3.1/lib/active_support/dependencies.rb:100:in
`const_missing’: uninitialized constant States

The states table contains an id and state field. The changes table
holds a foreign key named state_id that references the states table.

I want this code to simply display the text from the state field for
the specified change request.

Can anyone tell me what’s wrong?

In your Change model, do you have belongs_to :state ? From what I can
tell, this is what you should have if your changes table has a fk
field called state_id which links over to the states table’s id field.
If these assumptions are correct, you would want to do <%=
change.state.state %>

On 10/25/06, [email protected] [email protected] wrote:

`const_missing’: uninitialized constant States


Thomas M.
[email protected]

I do have an entry in my Change model, but it says belongs_to:states.
I also have an entry in the state model saying has_many:changes. When
I try to use <%= change.state.state %> I get a no method found error,
which is why I was trying <%= change.states.state %>. I have other
tables with similar foreign key relationships and they all seem to work
fine.

[email protected] wrote:

I do have an entry in my Change model, but it says belongs_to:states.
I also have an entry in the state model saying has_many:changes. When
I try to use <%= change.state.state %> I get a no method found error,
which is why I was trying <%= change.states.state %>. I have other
tables with similar foreign key relationships and they all seem to work
fine.

I think that when you call change.states, “belongs_to :states” in your
Change model tries to find a States model and fails when it doesn’t
exist.

You should have “has_many :changes” in your State model (so it sounds
like you have that part right), and “belongs_to :state” in your Change
model (a State can have many Changes, but a Change belongs only to a
single State). This will give you change.state.state in your
controllers/views.

The only other suggestion I would make would be to possibly change the
name of your data column to “name” - state.state is kind of redundant,
whereas state.name seems a little clearer. Comes down to personal
preference and what makes sense to you, though.

I do have an entry in my Change model, but it says belongs_to:states.
I also have an entry in the state model saying has_many:changes. When
I try to use <%= change.state.state %> I get a no method found error,
which is why I was trying <%= change.states.state %>. I have other
tables with similar foreign key relationships and they all seem to work
fine.

I do have an entry in my Change model, but it says belongs_to:states.
I also have an entry in the state model saying has_many:changes. When
I try to use <%= change.state.state %> I get a no method found error,
which is why I was trying <%= change.states.state %>. I have other
tables with similar foreign key relationships and they all seem to work
fine.

  1. why do you post all your replies 3 times? :slight_smile:

  2. it has to be: belongs_to :state

belongs_to are always singluar, has_many are always plural.

like you would read it out loud: a change belongs to a state, and a
state has many changes

Hello Ryan,

I do have an entry in my Change model, but it says belongs_to:states.
I also have an entry in the state model saying has_many:changes.
When I try to use <%= change.state.state %> I get a no method found
error, which is why I was trying <%= change.states.state %>.

Have you tried with belongs_to :state
(singular) and <%= change.state.state %> ?

РJean-Fran̤ois.


Ã? la renverse.

  1. I think there’s a problem with my proxy server at work from where
    I’m posting.

  2. The singular version worked. I guess I didn’t pay enough attention
    to the method parts.

Ryan

Merci Jean-François,

Ca a
marché!

Merci Jean-François,

Ca a
marché!