我有一个包含字段名称和性别的用户模型。并且用户可以与另一个用户建立称为“配偶”的一对一关联,该关联必须在男性用户和女性用户之间。
在railscasts self-referential-association的帮助下,我创建了这样的基本关联,
class User < ActiveRecord::Base
has_one :spouse_list
has_one :spouse, :through => :spouse_list
has_one :inverse_spouse_list, :class_name => "SpouseList", :foreign_key => "spouse_id"
has_one :inverse_spouse, :through => :inverse_spouse_list, :source => :user
end
class SpouseList < ActiveRecord::Base
belongs_to :spouse, :class_name => "User"
belongs_to :user
end
SpouseList包含字段:spouse_id,:user_id,
上面的关联可以为单个用户创建许多行,如果访问配偶由@ user.spouse_list.spouse.name
显示第一行如何限制男性用户和女性用户?
答案 0 :(得分:1)
最后我为以下条件做了一对一的自我关联,
“用户可以与另一个用户建立称为”配偶“的一对一关联,该关联必须在男性用户和女性用户之间”
将字段spouse_id添加到用户模型并创建自定义验证的自关联
class User < ActiveRecord::Base
belongs_to :spouse, :class_name => 'User', :inverse_of => :base_user, :foreign_key => "spouse_id"
has_one :base_user, :class_name => 'User', :inverse_of => :spouse
validate :validate_spouse_gender
private
def validate_spouse_gender
errors.add(:spouse_id, 'could not be with same sex') if spouse && spouse.sex == sex
end
end
现在男性用户A只能与另一个用户B作为配偶关联,如果B是性别女性。
希望它对某人有所帮助。