Rails 数据建模:如何为实际上是另一个模型集合的 has_many 关系建模?

Rails Data Modelling: How can I model a has_many relationship that's actually a collection of another model?

更具体地说,我有一个 User 模型 has_one Profile,现在我需要添加从 User 到新模型 Contacthas_many 关系,但 Contact 实际上是 Profile 的集合(“用户 has_many 个人资料s”在幕后)。

如何正确建模?有没有办法完全避免创建新模型 Contact

我担心的是,问这个问题的原因是必须执行低效查询来检索用户联系人 集合 user.contacts 然后每个 Contact 我必须创建一个查询来检索每个 Profile,对吗?

我怎样做才能做到:user.contacts 它检索 interfere/is 的 Profiles 的集合独立于 user.profile 关系?

提前致谢!

您不一定需要一个新模型,但拥有一个最简单(至少在我看来),只是不是以上述方式。

除了

Rails,您还需要一个连接 table,例如 user_profiles,它包含 user_idprofile_id 的外键。现在,如何完成这项工作取决于您。

这里的 Contact 模型实际上是一个 Rails-y 模型 UserProfile 模型。所以你的用户看起来像:

class User
  has_many :user_profiles # the join table
  has_many :contacts, through: :user_profiles

  has_one: profile
end

在这里,user.contacts 会为您提供配置文件。你还有那个额外的模型,UserProfile,你只是没有在实践中使用它:

class UserProfile
  belongs_to :user
  belongs_to :profile
end

您可以通过以下方式构建:

rails g model UserProfile user:references profile:references

希望对您有所帮助!