我考虑到一个相对复杂的模型关联,并且想知道如何实现。本质上,这就是我想要完成的。
我对必须设置的关联有些困惑。文件必须属于团队和用户吗?用户和文档都有多个团队,并且团队有很多用户。我可能需要团队和用户之间的联接表(成员)。
有很多解决方法,但是乍一看,我建议使用polymorphic associations
我还没有测试下面的内容,但是我们的想法是,您将使用多态关联来关联文档的查看者和编辑者。
class User
belongs_to :team, optional: true
has_many :documents
end
class Team
has_many :users
end
class Document
belongs_to :owner, class_name: :User
has_many :documents_viewers
has_many :viewers, through: :documents_viewers, source: :viewerable
end
# the joins table
class DocumentsViewer
enum permissions: %w[view edit]
belongs_to :document
belongs_to :viewerable, polymorphic: true
end