2011-08-13 72 views
2

我正在用Rails 3.1編程一個RPG網站,我有一個用戶模型(字段無關緊要)。在rails中做一個「couple」系統的最佳方式是什麼?

我需要的是能夠結婚兩個用戶,但我不知道什麼是最好的方式爲協會。

我想過user1和user2作爲列,但我不知道如何說,兩者都是相同的時,將其關聯到用戶模型,以知道用戶是否已婚或不。 (也就是說,用戶ID可以在一列或另一列...)

預先感謝您!

回答

3

如果它總是一對一,你可以設置它是這樣的:

class User 
    belongs_to :partner, :foreign_key => :partner_id, :class_name => 'User', :inverse_of => :partner 
end 

的應處置的反比關係爲好,例如

user_1.partner = user_2 
user_2.partner # <user_1> 

如果您需要Marriage爲一類,婚姻可能只是通過has_many與用戶和驗證用戶的#爲2(如果它是一個傳統的婚姻)。例如。如果你去了STI路線:

class Marriage < ActiveRecord::Base 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :marriage 
end 

class TraditionalMarriage < Marriage 
    validate do |record| 
    if record.users.length != 2 
     record.errors.add(:users, "Marriage is between 2 people!!") 
    end 
    end 
end 

class PartyTimeMarriage < Marriage 
    validate do |record| 
    if record.users.length < 3 
     record.errors.add(:users, "A good marriage requires at least three spouses!!") 
    end 
    end 
end 
+0

這會工作,但你將失去'Marriage'作爲外部類。作爲外部類的婚姻仍然會工作,如果婚姻'has_many'用戶,但驗證該數字是2. – numbers1311407

+1

+1第一次我看到反向,很好,不得不穀歌它 - http://apidock.com/rails/ ActiveRecord/Associations/ClassMethods/belongs_to – house9

+0

+1。在你的重構中很好地使用STI。 –

1

has_one :wife, :class_name => "User" 
belongs_to :husband, :class_name => "User" 

某種形式應該在你的用戶活動記錄模式工作。可能會對性別進行驗證。

另一種解決方案是創建一個帶有2個用戶引用(has_one)的已婚表格,以保存其他數據,如結婚日期和內容。

+0

這當然假設同性婚姻在這個幻想宇宙中被禁止 – numbers1311407

+0

是的,我想要一個外部表;)(爲了舉行夫妻,婚姻等......) – Cydonia7

1

這是未經測試,但

class User < ActiveRecord::Base 
    belongs_to :spouse, :class_name => "User", :foreign_key => 'spouse_id' 

    def get_married_to(user) 
     self.spouse = user 
     user.spouse = self 
    end 
end 

u1 = User.new 
u2 = User.new 
u1.get_married_to(u2)  

值得嘗試還檢查了鐵軌指南:http://guides.rubyonrails.org/association_basics.html

相關問題