在我正在构建的用于学习 RoR 的应用程序中,我有一个模型“文档”和一个模型“业务合作伙伴”。在“文档”模型上,我有 2 个字段(“发送者”和“接收者”)引用模型“业务合作伙伴”。
如何为具有不同字段的同一目标建模两次?迁移应该是什么?
相关问题:如何为业务合作伙伴建立与其自身的关系模型?即一家公司有许多业务合作伙伴,但也可以是业务合作伙伴。注意 - 不要指向同一条记录(A 公司不能与 A 公司(本身)有关系。
最佳答案
假设您的 Document
模型(即您的 文档
表),你可以这样做:
class Document < ActiveRecord::Base
belongs_to :sender, class_name: "BusinessPartner"
belongs_to :receiver, class_name: "BusinessPartner"
end
只要您将这些列放在表格中,就没有特殊的迁移(如果您将它们命名为其他名称,只需替换 sender
和 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
与 BusinessPartner
的 ID 匹配的所有行,与 received_documents
类似。
更多信息请参见 Rails docs .
关于你的第二个问题,有一个section of the Rails docs描述这一点,称为“自连接”。但是,考虑到您想要对多对多关系进行建模,您将需要稍微特殊的表排列。请参阅this SO answer有关如何设置该安排的一些详细信息。这实际上是一个有点棘手的话题,如果您对细节感兴趣,我建议您提出一个单独的问题(尽管那篇文章回答得很好)。
关于ruby-on-rails - Rails 5 - 具有 2 个字段引用同一对象的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39830869/