我正在构建一个有助于管理构造文档的Ruby On Rails API-许多不同类型的文档都具有不同的字段,因此我目前有一个模型。
但是,我还希望能够引用这些文档,因为每个文档可以具有任意数量的关联文档,这些文档可以是任何文档类型。我希望能够写类似
的东西class Drawing < ApplicationRecord
...
has_many :associated_documents
我需要的是相关文档的名称,id和类型(本质上是这样,以便人们可以轻松地在前端的相关文档之间导航)
这是单表继承的用例吗?有办法用多态关联做到这一点吗?由于前端用例是链接列表,因此我应该只存储链接吗?
答案 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的所有关联),还必须做一些额外的工作。