0

我有一个包含字段名称和性别的用户模型。并且用户可以与另一个用户建立称为“配偶”的一对一关联,该关联必须在男性用户和女性用户之间。

在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 访问配偶,则显示第一行

如何在男性用户和女性用户之间进行限制?

4

1 回答 1

1

最后我为以下条件进行了一对一的自我关联,

“用户可以与另一个用户建立称为“配偶”的一对一关联,该关联必须是男性用户和女性用户之间的关联”

向用户模型添加了一个字段配偶 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

现在,如果 B 的性别为女性,则男性用户 A 只能作为配偶与另一个用户 B 建立关联。

希望它可以帮助某人。

于 2012-11-26T08:05:40.407 回答