Multiple foreign keys create / destroy

I have 4 models :

class Country < ActiveRecord::Base   has_many :cities   has_many :streets   has_many :houses end

class City < ActiveRecord::Base   belongs_to :country   has_many :streets   has_many :houses end

class Street < ActiveRecord::Base   belongs_to :country   belongs_to :cities   has_many :houses end

class House < ActiveRecord::Base     belongs_to :country     belongs_to :cities     belongs_to :streets end

Now...if i want to create a house like this:

@street = Street.find(1) @house = @street.houses.new @house.name = "Burlington house" @house.save

Now...only the street_id key is set in the house record...But not city_id and country_id... Is there an ORM way to let active record do the job ?

Thanks

I have 4 models :

class Country < ActiveRecord::Base has_many :cities has_many :streets has_many :houses end

class City < ActiveRecord::Base belongs_to :country has_many :streets has_many :houses end

class Street < ActiveRecord::Base belongs_to :country belongs_to :cities has_many :houses end

class House < ActiveRecord::Base    belongs_to :country    belongs_to :cities    belongs_to :streets end

First off, watch those belongs_to - they should be singluar, ie
belongs_to :street.

Now...if i want to create a house like this:

@street = Street.find(1) @house = @street.houses.new @house.name = "Burlington house" @house.save

Now...only the street_id key is set in the house record...But not city_id and country_id... Is there an ORM way to let active record do the job ?

No. activerecord assumes the simple case ie that the has_many/ belongs_to relationship between street and house is all that it needs
(and why do you need to duplicate data between street and house ?
surely the country and city of the house is implicit from the street ?)

Fred

class House < ActiveRecord::Base belongs_to :country belongs_to :cities belongs_to :streets end

Now...if i want to create a house like this:

@street = Street.find(1) @house = @street.houses.new @house.name = "Burlington house" @house.save

Now...only the street_id key is set in the house record...But not city_id and country_id... Is there an ORM way to let active record do the job ?

That is the ORM way. The problem lies in your design (i.e. associations).

A country has many cities. Cities have many streets. These streets contain houses. Sure a house belongs to a city, but given the additional entities involved the above model makes more sense.

@house = some_city.streets.find(1).houses.create(:name=>'Adelitas')