2012-11-22 53 views
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访问配偶

如何限制男性用户和女性用户之间的关系?

+0

是否可以重新编写您的问题,因为很难理解您要实现的目标。 – simonmorley

+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是性别女性。

希望它可以帮助别人。