2016-04-21 6 views
1

Ich habe die Verknüpfung Setup wie folgt, aber ich bekomme Fehler/Ausnahmen von Rails geworfen sagen mir, dass ich nicht die Verbände richtig eingerichtet haben.ActiveRecord hat viele durch beide mit polymorphen sein

Hier ist, was ich habe:

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 

Der Fehler von Rails:

nicht die Quelle Verein finden konnte (n) "Fall" oder: Fälle in Modell CaseAccess. Versuchen Sie 'has_many: cases,: through =>: case_accesses,: source =>'. Ist es eine der Politik, Verbindung oder Eigennutz?

Ich habe versucht, die Quelle zu ownable festlegen und es verursacht Probleme in meiner Abfrage. Wie sollte ich diesen Verein gründen? Es ist ein traditionelles hat viele durch, außer auf der einen Seite kann die policy entweder Case oder Ppae sein, und die ownable kann vom Typ Agent oder User sein.

Spalten für Tabellen:

Case 
-id 

CaseAccess 
-id 
-policy_id 
-policy_type 
-ownable_id 
-ownable_type 

Agent 
-id 
+0

Könnten Sie bitte auch die Spalten für jeden Post dieser Tabellen - nur für zusätzliche Referenz – ZubatMan

+1

Ja, OP bearbeiten. – Noah

Antwort

1

Ein Fall hat als Politik viele case_accesses. Ist der CaseAccess die Richtlinie oder ist die Case die Richtlinie für den CaseAccess?

Ich glaube, Sie ändern müssen

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

zu

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

+0

Ehh nein das hat es nicht gemacht. – Noah

+0

Ich habe es bekommen, Antwort posten. – Noah

0

Dies ist, was es tat:

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 
Verwandte Themen