ActiveRecord relationships problem

I am having some difficulty correctly setting up the relationships between two ActiveRecord model. The DB tables look something like this:

table scripts { id :integer description :text }

table households { id :integer script_id :integer }

There are a small number of scripts and a large number of households. Each household has exactly one script.

I have a household but when I call household.Script.description I am not getting the correct result. household.Script is returning nil if I define the relationship as follows (there is definitely a matching record in the scripts table for household.script_id):

class Script < ActiveRecord::Base{ has_many :Household }

class Household < ActiveRecord::Base { belongs_to :Script }

I get "Mysql::Error: Unknown column 'scripts.household_id' in 'where clause': SELECT * FROM `scripts` WHERE (scripts.household_id = 7820) LIMIT 1" if I define it as:

class Script < ActiveRecord::Base{ has_many :Household }

class Household < ActiveRecord::Base { has_one :Script }

Any ideas?

Drew Batshaw wrote:

I am having some difficulty correctly setting up the relationships between two ActiveRecord model. The DB tables look something like this:

table scripts { id :integer description :text }

table households { id :integer script_id :integer }

There are a small number of scripts and a large number of households. Each household has exactly one script.

I have a household but when I call household.Script.description I am not getting the correct result. household.Script is returning nil if I define the relationship as follows (there is definitely a matching record in the scripts table for household.script_id):

class Script < ActiveRecord::Base{ has_many :Household }

class Household < ActiveRecord::Base { belongs_to :Script }

I get "Mysql::Error: Unknown column 'scripts.household_id' in 'where clause': SELECT * FROM `scripts` WHERE (scripts.household_id = 7820) LIMIT 1" if I define it as:

class Script < ActiveRecord::Base{ has_many :Household }

class Household < ActiveRecord::Base { has_one :Script }

Any ideas?

Your second configuration is definitly wrong, Household should definitly have only one Script but the syntax should be like your first example. i don't really know how you are getting the wrong results but i have some few ideas.

1. use undercase for the relations names (has_many :households, belongs_to :script). 2. If you cleared your database data, Maybe your database's sequences did not restart and old id's are being used.

Elad Meidar wrote:

1. use undercase for the relations names (has_many :households, belongs_to :script). 2. If you cleared your database data, Maybe your database's sequences did not restart and old id's are being used.

Changing it to undercase did that job. Any idea why that is?

That's the way the associations work; they use the 'table-ized' version of the Class.

So if you had a class name of BlogPost, you might have:

has_one :blog_post

or

has_many :blog_posts

Steve Downey wrote:

That's the way the associations work; they use the 'table-ized' version of the Class.

So if you had a class name of BlogPost, you might have:

has_one :blog_post

or

has_many :blog_posts

On Aug 1, 12:12�pm, Drew Batshaw <rails-mailing-l...@andreas-s.net>

That is good to know but strange since it has never been an issue in the past when I have used the class name.