我正在使用Rails 3.1编写一个RPG网站,并且我已经有了一个用户模型(字段并不重要)。
我需要的是能够与两个用户结婚,但我不知道什么是最好的关联方式。
我认为user1和user2是列,但我不知道在将其与用户模型关联以了解用户是否结婚时,如何说两者是相同的。(这就是说,用户id可以在一列或另一列上...)
提前谢谢你!
发布于 2011-08-14 05:05:52
如果总是一对一,你可以这样设置:
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发布于 2011-08-14 05:12:24
某种形式的
has_one :wife, :class_name => "User"
belongs_to :husband, :class_name => "User"应该可以在你的用户活动记录模型中工作。也许可以对性别进行一些验证。
另一种解决方案是创建一个具有2个用户引用(has_one)的结婚表,以保存结婚日期等其他数据。
发布于 2011-08-14 05:16:24
这是未经测试的,但值得一试。
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) 也可以查看rails指南:http://guides.rubyonrails.org/association_basics.html
https://stackoverflow.com/questions/7053254
复制相似问题