在我为学习RoR而开发的应用程序中,我有一个模型“文档”和一个模型“业务合作伙伴”。在“文档”模型中,我有两个字段(“发件人”和“接收者”),指的是“业务伙伴”模式。
如何用不同的字段对同一个目标进行两次belongs_to建模?迁移应该是什么?
相关问题:我如何为商业伙伴建立自己与it的关系模型?也就是说,一家公司有许多商业伙伴,但也可以成为商业伙伴。注:不属于同一记录(A公司不能与A公司(本身)有关系)。
发布于 2016-10-03 11:57:33
假设您拥有sender_id和receiver_id列,用于Document模型上的发送方和接收方关系(即在documents表上),您可以这样做:
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文档。
关于你的第二个问题,有一个Rails文档的部分描述这一点,它被称为“自我连接”。然而,考虑到你想要建立一个多到多的关系,你将需要一个稍微特殊的表格安排。有关如何设置该安排的一些详细信息,请参见这就是答案。实际上,这本身就是一个有点棘手的话题,如果你对细节感兴趣,我建议问一个单独的问题(尽管这篇文章很好地回答了这个问题)。
https://stackoverflow.com/questions/39830869
复制相似问题