2017-04-26 7 views
0

のように続編に参加します次のSQL:どのようにチェーンが、私は次の関係を持つモデル "mymodelという" を持っているActiveRecordの

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

しかし続編で:

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

次のSQLを与える:

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

なぜjoinが最後の結合テーブルの名前を使用していますか? SequelでActiveRecordによって生成された同じSQLを取得するにはどうすればよいですか?

答えて

1

デフォルトでは、Sequelのjoinでは、暗黙の修飾子が最後に結合されたテーブルです。

ので、

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

に等しい:これは@jeremyevansと公式の続編のIRCチャットからである

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

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

は明示の修飾子を使用してください。

関連する問題