2013-09-21 124 views
0

我有模型消息。它可以由我的數據庫中的個人或組織發佈。 我想調用update.contact,其中聯繫人是Organization或Person。如果我想將2個模型與一個模型鏈接,選擇哪種類型的關係

class Update < ActiveRecord::Base 
has_one :contact 

我喜歡用的決定就像是

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

但這種方法在Rails中不可用。 我應該使用多態關聯嗎?如何組織這種情況下的架構?

回答

0

聽起來像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等。

相關問題