如果我想将2个模型与一个模型链接,选择哪种类型的关系
问题描述:
我有模型消息。它可以由我的数据库中的个人或组织发布。 我想调用update.contact,其中联系人是Organization或Person。如果我想将2个模型与一个模型链接,选择哪种类型的关系
class Update < ActiveRecord::Base
has_one :contact
我喜欢用的决定就像是
class Organization < ActiveRecord::Base
belongs_to :update, as: :contact
但这种方法在Rails中不可用。 我应该使用多态关联吗?如何组织这种情况下的架构?
答
听起来像Organization
和Person
可能是同一实体(客户,用户,无论)的两种不同变体。那么,为什么不为他们两个创建一个共同的父模型呢?这样的父代不一定需要一张表,而且你可能只需在其中定义常用方法。 Update
更多的是一个动作而不是一个对象,它可以应用于一个对象(通常在其控制器中)。对于Contact
类,可以使用多态关联。所以,你可能有:
class Parent < ActiveRecord::Base
# stuff Person and Organization share
end
class Person < Parent
has_one :contact, as: :owner
# Person methods etc.
end
class Organization < Parent
has_one :contact, as: :owner
# Organization stuff
end
class Contact
belongs_to :owner, polymorphic: true
def update
#...
end
# other stuff for Contact
end
然后,你可以这样写行:
Person.first.contact.update
或任何你需要与你的对象做。
如果您的Organization
和Person
没有太大差别,您可以为父类创建一个表,然后在那里添加has_one
等。