2016-04-21 42 views
1

我有像下面的關聯設置,但我得到的錯誤/ Rails拋出的異常告訴我,我沒有正確設置關聯。ActiveRecord有許多通過兩個是多態

這是我有:

class Case 
    has_many :case_accesses, as: :policy, inverse_of: :case, dependent: :destroy 

    has_many :agents, through: :case_accesses, source: :ownable, source_type: 'Agent' 
end 

class CaseAccess 
    belongs_to :policy, polymorphic: true 

    belongs_to :ownable, polymorphic: true 
end 

class Agent 
    has_many :case_accesses, as: :ownable, dependent: :destroy 

    has_many :cases, through: :case_accesses 
end 

Rails中的錯誤:

找不到源協會(S) 「的情況下」 或者:模型CaseAccess情況。試試'has_many:cases,:through =>:case_accesses,:source =>'。它是一種政策,連接還是可以持有的?

我試着將源代碼設置爲可擁有並且在查詢中導致問題。我應該如何設置這種關聯?這是一個傳統的有很多通過,除了一方policy可以是CasePpae類型,並且ownable可以是AgentUser類型。

列於表:

Case 
-id 

CaseAccess 
-id 
-policy_id 
-policy_type 
-ownable_id 
-ownable_type 

Agent 
-id 
+0

能否請您也張貼每一列這些表格 - 僅供參考 – ZubatMan

+1

是,編輯OP。 – Noah

回答

1

的案例有很多case_accesses政策。 CaseAccess是策略,還是Case是CaseAccess的策略?

我相信你需要改變

has_many :case_accesses, as: :policy, inverse_of: :case, dependent: :destroy

has_many :case_accesses, inverse_of: :policy, dependent: :destroy

+0

呃不,沒有這樣做。 – Noah

+0

我明白了,發佈了答案。 – Noah

0

這是什麼做的:

class Case 
    has_many :case_accesses, as: :policy, inverse_of: :policy, dependent: :destroy 

    has_many :agents, through: :case_accesses, source: :ownable, source_type: 'Agent' 

    has_many :users, through: :case_accesses, source: :ownable, source_type: 'User' 
end 

class CaseAccess 
    belongs_to :policy, polymorphic: true 

    belongs_to :ownable, polymorphic: true 
end 

class Agent 
    has_many :case_accesses, as: :ownable, dependent: :destroy 

    has_many :cases, through: :case_accesses, source: :policy, source_type: 'Case' 
end