如果我想将2个模型与一个模型链接,选择哪种类型的关系

问题描述:

我有模型消息。它可以由我的数据库中的个人或组织发布。 我想调用update.contact,其中联系人是Organization或Person。如果我想将2个模型与一个模型链接,选择哪种类型的关系

class Update < ActiveRecord::Base 
has_one :contact 

我喜欢用的决定就像是

class Organization < ActiveRecord::Base 
belongs_to :update, as: :contact 

但这种方法在Rails中不可用。 我应该使用多态关联吗?如何组织这种情况下的架构?

听起来像OrganizationPerson可能是同一实体(客户,用户,无论)的两种不同变体。那么,为什么不为他们两个创建一个共同的父模型呢?这样的父代不一定需要一张表,而且你可能只需在其中定义常用方法。 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 

或任何你需要与你的对象做。

如果您的OrganizationPerson没有太大差别,您可以为父类创建一个表,然后在那里添加has_one等。