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 -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 8 Mar 2009, at 15:11, Ruby Newbie wrote:> > > 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 > endFirst 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> Thanks > -- > Posted via http://www.ruby-forum.com/. > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Frederick Cheung wrote:> On 8 Mar 2009, at 15:11, Ruby Newbie wrote: > >> class City < ActiveRecord::Base >> >> 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. >> 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 ?) > > FredYour post made it clear to me... Just a beginner...:( Thanks -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
> 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'') --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---