ruby-on-rails - 在 Rails 中创建 "couple"系统的最佳方法是什么?

标签 ruby-on-rails

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

我需要的是能够将两个用户结合起来,但我不知道对于关联来说最好的方式是什么。

我将 user1 和 user2 视为列,但在将其与 User 模型关联以了解用户是否已婚时,我不知道如何说两者是相同的。 (也就是说,用户 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(如果是传统婚姻) 。例如。如果您走的是性传播感染路线:

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

关于ruby-on-rails - 在 Rails 中创建 "couple"系统的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7053254/

相关文章:

ruby-on-rails - rails 3 : Simple form start date

sql - 在 postgresql 中, "database"和 "relation"有什么区别? ('error relation x does not exist' , 'error database x already exists' )

ruby-on-rails - 如何在某个字符第二次出现后截断字符串

ruby-on-rails - 管理 'delete' 链接的 Rspec 测试失败。 Michael Hartl 的 ROR 3.2 教程 - 第 9.4.2 章

ruby-on-rails - 使用 postgres 数组的 Rails OR 查询

ruby-on-rails - RSpec 和 rails : Stub @virtual_path for translation helper to test an application helper

ruby-on-rails - Git 仅从特定文件夹 merge

ruby-on-rails - rails : Using CanCan to define multiple roles depending on instances of single Model?

ruby-on-rails - Ruby on Rails——用 javascript 更新部分新值?

ruby-on-rails - ebay BulkDataExchangeRequests API XML - 缺少 UUID