On May 1, 2009, at 9:32 AM, Chris Bird wrote: > has_one does indeed mean has a maximum of one. The belongs_to side > means has exactly one. > > I don't know (because I never tried it) what happens if you put > "belongs_to on both sides - i.e. make something exactly 1:1. Obviously > not relevant in this case, but I could see situations where for > performance reasons you may want that kind of partition - or when > wrapping an external database. > > C
Belongs_to implies the presence of the foreign key so you can't have it on both models (unless you let them be out-of-sync while being created). Has_one will only find one, but there could be many records that have the right foreign key. Just take any has_many association and change it to has_one (making the symbol singular, of course) and it will "just work" even though all the original records from the has_many are actually still there. Notice how I defined has_many :marriages and has_one :current_marriage that both use the same Marriage model. Those all belongs_to :wife (and belongs_to :husband, too) -Rob > On Apr 30, 1:08 pm, Rob Biedenharn <[email protected]> > wrote: >> On Apr 30, 2009, at 1:29 PM, serenobs wrote: >> >> >> >>> thanks for replies. >>> it gives me some thought about making active record association. >> >>> then what if the man is a single? >>> husband may not have current_marriage. >>> i was thinking that has_one means it should have one object. >>> But as you know not every man will marry. >> >>> please more advice for this novice. >> >> Then, man.current_marriage will be nil as will man.wife >> >> has_one really defines a 0/1 and has_many a 0/n relation. >> >> -Rob >> >> >> >> >> >>> On May 1, 2:17 am, Rob Biedenharn <[email protected]> >>> wrote: >>>> On Apr 30, 2009, at 12:56 PM, Commander Johnson wrote: >> >>>>> Did you consider >> >>>>> has_one :wife >> >>>>> And in Wife.rb >> >>>>> belongs_to :man >> >>>> Or: >>>> class Wife >>>> has_many :marriages >>>> has_one :current_marriage, :class_name => >>>> 'Marriage', :conditions >>>> => { :current => true } >>>> has_one :husband, :through => :current_marriage >>>> end >> >>>> class Marriage >>>> belongs_to :wife >>>> belongs_to :husband >>>> end >> >>>> class Husband >>>> has_many :marriages >>>> has_one :current_marriage, :class_name => >>>> 'Marriage', :conditions >>>> => { :current => true } >>>> has_one :wife, :through => :current_marriage >>>> end >> >>>> -Rob >> >>>> Rob Biedenharn http://agileconsultingllc.com >>>> [email protected] >> >>>>> On Thu, Apr 30, 2009 at 6:49 PM, serenobs <[email protected]> >>>>> wrote: >> >>>>> (my post was deleted i don't know why) >>>>> Hi. I have a question. >>>>> for example, when model records about man, suppose man can marry >>>>> with >>>>> 1 woman. >>>>> then i think code will be like this >>>>> class Man < ActiveRecord::Base >>>>> has_many: wife >>>>> end >> >>>>> Because one man can marry with up to 1 woman( 0 or 1 ) >>>>> it can't be 1:1 relationship, didn't it? >>>>> but at the same time more than 1 wife is not allowed. >>>>> then how can i model this relationship into rails code? >>>>> has_many :limit option is fit for this relation? >> >>>>> Thanks. >>>>> and i wish it is not deleted again. If it should be deleted please >>>>> let >>>>> me know why it should be. --~--~---------~--~----~------------~-------~--~----~ 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 [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 -~----------~----~----~----~------~----~------~--~---

