2012-11-22 142 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是性別女性。

希望它可以幫助別人。