Rails self referential association

i have a user model with fields name and sex. And each user can have an one-to-one association called "father" with a male user.

So in user model i added a field father_id and added association like this,

class User < ActiveRecord::Base   belongs_to :father, :class_name => 'User', :inverse_of => :user, :foreign_key => "father_id"   has_one :user, :class_name => 'User', :inverse_of => :father

  SEX=["male", "female"]

  validates :sex, :presence => true,:inclusion => { :in => SEX }

end

now it can make both female user and male user as father. How could i restrict it to make user as father only whose sex is male?

i have a user model with fields name and sex. And each user can have an one-to-one association called "father" with a male user.

So in user model i added a field father_id and added association like this,

class User < ActiveRecord::Base   belongs_to :father, :class_name => 'User', :inverse_of => :user, :foreign_key => "father_id"   has_one :user, :class_name => 'User', :inverse_of => :father

  SEX=["male", "female"]

  validates :sex, :presence => true,:inclusion => { :in => SEX }

end

hmm i think you just need to define a custom validation

validates :validates_father_is_a_male

private

def validates_father_is_a_male   errors.add(:father_id, 'is not a male') if father && father.sex == 'male' end

yes, custom validation helps me.

i modified your code a little for my need,

validate :validates_father_is_a_male

private

def validates_father_is_a_male   errors.add(:father_id, 'is not a male') if father && father.sex == 'female' end

Thanks a lot!

Don't forget to allow for some of the less conventional situations that can occur in modern life where male and female conditions are not immutable and parents may not necessarily be of different sexes. It is possible for someone classed as female to also be a father. It may be better to allow the user to worry about these things rather than force validations on them.

Colin

@Colin

sure, will consider it.

Thanks