【发布时间】:2018-03-11 01:45:48
【问题描述】:
我觉得这是一个超级简单的问题,但我在任何地方都找不到答案!
问题:
如果我之前有一个类似这样的 has_many 关系:has_many :wikis,如果以后我创建一个类似下面的 has_many through 关系,我是否保留这个关系?
has_many :collaborators
has_many :wikis, through: :collaborators
这一切都在我的用户模型中。
背景:
在我的 rails 应用程序中,我有一个用户模型和一个 Wiki 模型。我只是让用户能够在私人 wiki 上进行协作,所以我迁移了一个 Collaborator 模型,然后迈出了通过关系创建 has_many 的步骤。我不确定在输入has_many :wikis, through: :collaborators 之后是否还需要has_many :wikis。
我感到困惑的原因是因为用户应该仍然能够在没有合作者的情况下创建 wiki,而且我不确定 has_many through 关系在后台是如何运作的。
最初我只有 User 和 Wiki 的一对多关系。
# User model
class User < ApplicationRecord
...
has_many :wikis # should I delete this?
has_many :collaborators
has_many :wikis, through: :collaborators
...
end
# Collaborator model
class Collaborator < ApplicationRecord
belongs_to :user
belongs_to :wiki
end
# Wiki model
class Wiki < ApplicationRecord
belongs_to :user
has_many :collaborators, dependent: :destroy
has_many :users, through: :collaborators
...
end
【问题讨论】:
-
我会添加两个不同的关系,
has_many :created_wikis和has_many :collaborated_wikis。此外,为了更好地维护创建 wiki 的用户,应在创建 wiki 时添加为协作者。因此,用户可以知道他创建了哪些 wiki,以及他可以为哪些 wiki 做出贡献。
标签: ruby-on-rails has-many-through