Forum: Ruby on Rails is possbile limit the number of object in has_many option?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
67259181b4d628f350f5edfafcea6520?d=identicon&s=25 serenobs (Guest)
on 2009-04-30 18:51
(Received via mailing list)
(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.
7fe5937b838b580eeaa061c85f700583?d=identicon&s=25 Commander Johnson (Guest)
on 2009-04-30 18:57
(Received via mailing list)
Did you consider

has_one :wife

And in Wife.rb

belongs_to :man
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-04-30 19:18
(Received via mailing list)
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
Rob@AgileConsultingLLC.com
67259181b4d628f350f5edfafcea6520?d=identicon&s=25 serenobs (Guest)
on 2009-04-30 19:30
(Received via mailing list)
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.
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-04-30 20:08
(Received via mailing list)
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
Af8f5c2191526bdc38370c24d37a9f15?d=identicon&s=25 Chris Bird (Guest)
on 2009-05-01 15:33
(Received via mailing list)
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 Biedenharn <R...@AgileConsultingLLC.com>
Ef3aa7f7e577ea8cd620462724ddf73b?d=identicon&s=25 Rob Biedenharn (Guest)
on 2009-05-01 20:13
(Received via mailing list)
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
This topic is locked and can not be replied to.