2017-06-08 1 views
0

Hier können wir zwei AR-Modelle übernehmen haben:Wie Verknüpfen zweier verbindlicher Modelle in ActiveRecord?

class User < ApplicationRecord 
    has_many :proposals 
    has_many :concerns 
end 

class Job < ApplicationRecord 
    has_many :proposals 
    has_many :concerns 
end 

Vorschlag und Sorge sind beide Verbindungsmodelle zwischen User und Beruf:

class Proposal < ApplicationRecord 
    belongs_to :user 
    belongs_to :job 
end 

class Concern < ApplicationRecord 
    belongs_to :user 
    belongs_to :job 
end 

Was ich versuche zu lösen, wie Vorschläge und Anliegen verknüpfen durch sowohl Benutzer als auch Job. I.e. Ich möchte etc eifrig Laden verwenden:

proposals.preload(:concerns).map do |proposal| 
    # proposal.concerns are preloaded here 
    # and all concerns have same user and job 
end 

Meine aktuelle Lösung ist nur einfache concerns Methode, die über Bedenken Nachschlag - es ist unwirksam, da tun N + 1 Abfragen.

Ich möchte vermeiden, redundanten Fremdschlüssel zu einem der Beitritt Modelle hinzufügen.

Antwort

0

sollte dies vermeiden N + 1

Kein
Proposal.includes(user: :concerns).where(condition: 123) 
+0

abfragt, würden diese Bedenken alle Benutzer betrifft, mit allen Arbeitsplätzen verbunden. – MikDiet

+0

dann können Sie versuchen, eine Bedingung auf "Jobs" –

+0

hinzuzufügen, was genau Sie wollen –

Verwandte Themen