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
到新模型 Contact
的 has_many 关系,但 Contact
实际上是 Profile
的集合(“用户 has_many 个人资料s”在幕后)。
如何正确建模?有没有办法完全避免创建新模型 Contact
?
我担心的是,问这个问题的原因是必须执行低效查询来检索用户联系人 集合 :user.contacts
然后每个 Contact
我必须创建一个查询来检索每个 Profile
,对吗?
我怎样做才能做到:user.contacts
它检索 不 interfere/is 的 Profiles
的集合独立于 user.profile
关系?
提前致谢!
您不一定需要一个新模型,但拥有一个最简单(至少在我看来),只是不是以上述方式。
除了 Rails,您还需要一个连接 table,例如 user_profiles
,它包含 user_id
和 profile_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
希望对您有所帮助!
更具体地说,我有一个 User
模型 has_one Profile
,现在我需要添加从 User
到新模型 Contact
的 has_many 关系,但 Contact
实际上是 Profile
的集合(“用户 has_many 个人资料s”在幕后)。
如何正确建模?有没有办法完全避免创建新模型 Contact
?
我担心的是,问这个问题的原因是必须执行低效查询来检索用户联系人 集合 :user.contacts
然后每个 Contact
我必须创建一个查询来检索每个 Profile
,对吗?
我怎样做才能做到:user.contacts
它检索 不 interfere/is 的 Profiles
的集合独立于 user.profile
关系?
提前致谢!
您不一定需要一个新模型,但拥有一个最简单(至少在我看来),只是不是以上述方式。
除了Rails,您还需要一个连接 table,例如 user_profiles
,它包含 user_id
和 profile_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
希望对您有所帮助!