2017-11-03 2 views
0

Ich habe ein Modell, das wie folgt aussieht:Wie verweise ich auf mehrere Join-Tabellen mit demselben zugrunde liegenden Modell?

class A 
    has_many :B, -> { ... where clause 1 }, source: :tags 
    has_many :C, -> { ... where clause 2 }, source: :tags 
end 

tags auf zwei verschiedene Arten zu A schließt sich also im Grunde.

Ich mag würde eine Abfrage auszuführen, die innere eine andere Tabelle auf jeweils bezogen sowohl mit B und C durch A und Filter verbindet ist Attribute. Normalerweise würde ich das wie tun:

Other.joins(A: [:B, :C]).where('tags.id = 1') 

aber tags hier nicht eindeutig ist. Gibt es einen besseren Weg, dies zu tun?

Ich weiß, das nicht das sauberste Datenmodell ist, aber wir nur so tun habe ich diese Code-Basis von jemandem anderen geerbt: P

Antwort

1

Wie wäre es

Other.joins('inner join a on a.id = other.a_id 
      inner join (Select ...) as b 
      inner join (Select ...) as c 

      where 
       b... 
      or 
       c... 
      ') 
Verwandte Themen