我应该如何为不同的文档类型建模?

时间:2018-08-22 23:06:18

标签: ruby-on-rails modeling polymorphic-associations single-table-inheritance multi-table-inheritance

我正在构建一个有助于管理构造文档的Ruby On Rails API-许多不同类型的文档都具有不同的字段,因此我目前有一个模型。

但是,我还希望能够引用这些文档,因为每个文档可以具有任意数量的关联文档,这些文档可以是任何文档类型。我希望能够写类似

的东西
class Drawing < ApplicationRecord
  ...

  has_many :associated_documents

我需要的是相关文档的名称,id和类型(本质上是这样,以便人们可以轻松地在前端的相关文档之间导航)

这是单表继承的用例吗?有办法用多态关联做到这一点吗?由于前端用例是链接列表,因此我应该只存储链接吗?

1 个答案:

答案 0 :(得分:0)

鉴于您具有可以关联任意类(文档)的M:M关系,我想您应该看一下双面多态关联。

您可能有一个DocumentAssociation类,例如:

# == Schema Information
#
# Table name: document_associations
#
#  id                         :integer          not null, primary key
#  base_document_type         :string
#  base_document_id           :integer
#  associated_document_type   :string
#  associated_document_id     :integer
#  created_at                 :datetime         not null
#  updated_at                 :datetime         not null
#
class DocumentAssociation < ApplicationRecord
  belongs_to :base_document,        polymorphic: true
  belongs_to :associated_document,  polymorphic: true
end

然后类似:

class Drawing < ApplicationRecord
  has_many :base_document_associations, class_name: 'DocumentAssociation', as: :base_document
  has_many :associated_documents, through: :base_document_associations
end

这在方向上可能是正确的,但是您可能需要做一些摆弄。如果要能够在两个方向上导航(例如,对于给定的工程图,则需要工程图既是base_document又是related_document的所有关联),还必须做一些额外的工作。