is possbile limit the number of object in has_many option?

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

Did you consider

has_one :wife

And in Wife.rb

belongs_to :man

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

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.

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

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

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