在我正在构建学习RoR的应用程序中,我有一个模型“Document”和一个模型“Business Partner”。在“文档”模型中,我有两个字段(“发件人”和“接收者”),指的是“业务合作伙伴”模型。
如何使用不同的字段对belongs_to同一个目标进行两次建模?迁移应该是什么?
相关问题:如何为业务合作伙伴建立与自身的关系模型?即一家公司有很多商业伙伴,但也可以成为商业伙伴。注意 - 不是同一记录(公司A不能与公司A(本身)建立关系。
答案 0 :(得分:2)
假设您的sender_id
模型(即receiver_id
表)上的发件人和收件人关系列Document
和documents
,您可以做这样的事情:
class Document < ActiveRecord::Base
belongs_to :sender, class_name: "BusinessPartner"
belongs_to :receiver, class_name: "BusinessPartner"
end
只要您在桌面上找到了这些列,就没有特别的迁移(如果您已将其他内容命名为其他内容,则只需替换sender
和{{ 1}}以上任何列名减去receiver
部分。)
然后是您的_id
型号:
BusinessPartner
此处,class BusinessPartner < ActiveRecord::Base
has_many :sent_documents, class_name: "Document", foreign_key: "sender_id"
has_many :received_documents, class_name: "Document", foreign_key: "receiver_id"
end
将获取sent_documents
表中documents
与sender_id
的ID匹配的所有行,以及BusinessPartner
的相似内容。
Rails docs中的更多信息。
关于你的第二个问题,有一个section of the Rails docs描述了它,它被称为&#34; Self Joins&#34;。但是,考虑到您要建模多对多关系,您需要一个稍微特殊的表格排列。有关如何设置该安排的一些详细信息,请参阅this SO answer。这本身实际上是一个有点棘手的话题,如果你对细节感兴趣,我建议就此问一个单独的问题(虽然SO帖子很好地回答了它)。