Is possbile limit the number of object in has_many option?


#1

(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.


#2

Did you consider

has_one :wife

And in Wife.rb

belongs_to :man


#3

On Apr 30, 2009, at 12:56 PM, Commander J. 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 B. http://agileconsultingllc.com
removed_email_address@domain.invalid


#4

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.


#5

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


#6

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) wjay 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

On Apr 30, 1:08 pm, Rob B. removed_email_address@domain.invalid


#7

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