2017-04-26 5 views
0

Ich habe ein Modell "MyModel" mit den folgenden Beziehungen:Wie Kette schließt sich in Sequel wie in Active

Class MyModel 

    #if MyModel < ActiveRecord::Base 
    has_one a 
    has_one b 

    #if MyModel < Sequel::Model 
    many_to_one a 
    many_to_one b 

end 

Mit Active:

MyModel.joins(:a, :b) 

oder

MyModel.joins(:a).joins(:b) 

gibt die folgende SQL:

SELECT * FROM my_models INNER JOIN bs ON bs.id = my_models.b_id INNER JOIN as ON a.id = my_models.a_id 

Aber mit Sequel:

MyModel.join(:as, id: :a_id).join(:bs, id: :b_id) 

gibt die folgende SQL:

SELECT * FROM my_models INNER JOIN bs ON bs.id = my_models.b_id INNER JOIN as ON a.id = bs.a_id 

Warum join die letzten verknüpfte Tabelle der Namen verwenden, nicht? Wie bekomme ich das gleiche SQL, das von ActiveRecord in Sequel generiert wird?

Antwort

1

Standardmäßig ist in Sequels join der implizite Qualifier die letzte verbundene Tabelle.

So

MyModel.join(:as, id: :a_id).join(:bs, id: :b_id) 

gleich:

MyModel.join(:as, id: :a_id).join(:bs, id: Sequel[:as][:b_id]) 

Verwenden eine explizite Qualifier:

MyModel.join(:as, id: :a_id).join(:bs, id: Sequel[:my_models][:b_id]) 

Dies ist aus dem offiziellen Sequel IRC-Chat mit @jeremyevans.