11155
(-- --)
November 22, 2012, 9:53am
1
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
11155
(-- --)
November 22, 2012, 10:51am
3
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!
Colin_Law1
(Colin Law)
November 22, 2012, 11:02am
4
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