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
-~----------~----~----~----~------~----~------~--~---

Reply via email to