我正在使用Rails 3.1编写一个RPG网站,我有一个用户模型(字段无关紧要)。
我需要的是能够与两个用户结婚,但我不知道协会的最佳方式是什么。
我认为user1和user2是列,但我不知道如何将它与User模型相关联以便知道用户是否已婚。 (也就是说,用户ID可以在一列或另一列......)
提前谢谢!
答案 0 :(得分: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
答案 1 :(得分:1)
某种形式的
has_one :wife, :class_name => "User"
belongs_to :husband, :class_name => "User"
应该适用于您的用户活动记录模型。也许对性别进行一些验证。
另一种解决方案是创建一个包含2个用户引用(has_one)的已婚表,以保存结婚日期和内容等其他数据。
答案 2 :(得分: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