我正在用Rails 3.1編程一個RPG網站,我有一個用戶模型(字段無關緊要)。在rails中做一個「couple」系統的最佳方式是什麼?
我需要的是能夠結婚兩個用戶,但我不知道什麼是最好的方式爲協會。
我想過user1和user2作爲列,但我不知道如何說,兩者都是相同的時,將其關聯到用戶模型,以知道用戶是否已婚或不。 (也就是說,用戶ID可以在一列或另一列...)
預先感謝您!
我正在用Rails 3.1編程一個RPG網站,我有一個用戶模型(字段無關緊要)。在rails中做一個「couple」系統的最佳方式是什麼?
我需要的是能夠結婚兩個用戶,但我不知道什麼是最好的方式爲協會。
我想過user1和user2作爲列,但我不知道如何說,兩者都是相同的時,將其關聯到用戶模型,以知道用戶是否已婚或不。 (也就是說,用戶ID可以在一列或另一列...)
預先感謝您!
如果它總是一對一,你可以設置它是這樣的:
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
的
has_one :wife, :class_name => "User"
belongs_to :husband, :class_name => "User"
某種形式應該在你的用戶活動記錄模式工作。可能會對性別進行驗證。
另一種解決方案是創建一個帶有2個用戶引用(has_one)的已婚表格,以保存其他數據,如結婚日期和內容。
這當然假設同性婚姻在這個幻想宇宙中被禁止 – numbers1311407
是的,我想要一個外部表;)(爲了舉行夫妻,婚姻等......) – Cydonia7
這是未經測試,但
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
這會工作,但你將失去'Marriage'作爲外部類。作爲外部類的婚姻仍然會工作,如果婚姻'has_many'用戶,但驗證該數字是2. – numbers1311407
+1第一次我看到反向,很好,不得不穀歌它 - http://apidock.com/rails/ ActiveRecord/Associations/ClassMethods/belongs_to – house9
+1。在你的重構中很好地使用STI。 –