首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在rails中实现“情侣”系统的最好方法是什么?

在rails中实现“情侣”系统的最好方法是什么?
EN

Stack Overflow用户
提问于 2011-08-14 05:01:59
回答 3查看 302关注 0票数 2

我正在使用Rails 3.1编写一个RPG网站,并且我已经有了一个用户模型(字段并不重要)。

我需要的是能够与两个用户结婚,但我不知道什么是最好的关联方式。

我认为user1和user2是列,但我不知道在将其与用户模型关联以了解用户是否结婚时,如何说两者是相同的。(这就是说,用户id可以在一列或另一列上...)

提前谢谢你!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-08-14 05:05:52

如果总是一对一,你可以这样设置:

代码语言:javascript
复制
class User
  belongs_to :partner, :foreign_key => :partner_id, :class_name => 'User', :inverse_of => :partner
end

它也应该处理反向关系,例如

代码语言:javascript
复制
user_1.partner = user_2
user_2.partner # <user_1>

如果您需要将Marriage作为一个类,那么可以通过has_many将婚姻与用户关联起来,并验证用户数是否为2(如果是传统婚姻)。例如,如果您使用STI路线:

代码语言:javascript
复制
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
票数 3
EN

Stack Overflow用户

发布于 2011-08-14 05:12:24

某种形式的

代码语言:javascript
复制
has_one :wife, :class_name => "User"
belongs_to :husband, :class_name => "User"

应该可以在你的用户活动记录模型中工作。也许可以对性别进行一些验证。

另一种解决方案是创建一个具有2个用户引用(has_one)的结婚表,以保存结婚日期等其他数据。

票数 1
EN

Stack Overflow用户

发布于 2011-08-14 05:16:24

这是未经测试的,但值得一试。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7053254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档