Rails belongs_to 多种可能性的关系

Rails belongs_to relationship with multiple possibilities

我正在尝试建立关系,模型 Information、belongs_to 可以是 User 也可以是 Client

我考虑过放入我的 Information.rb

belongs_to :user
belongs_to :client

并在 User.rbClient.rb

has_one:信息

但这使得信息可以 belong_to 同时 UserClient

有没有办法让它只能属于其中一个或不只将其中一个字段留空?

P.S。如果需要,我正在使用 Rails 4.2、Ruby 2.2.1 和 Devise 进行我的帐户身份验证。

谢谢!

这听起来像是一种不寻常的联想,但它非常适合 Polymorphic Association。在这种情况下,您将为此协会声明一个名称

class Information < ActiveRecord::Base
  belongs_to :informational, polymorphic: true #or something like it

class User < ActiveRecord::Base
  has_many informations, as :informational

class Client < ActiveRecord::Base
  has_many informations, as :informational

而且您还需要向 Information 添加两列 informational_id, :integerinformational_type, :string

ClientUser 需要一个名为 informational_id 的整数进行索引。