如何像在 ActiveRecord 中那样在 Sequel 中链接连接

How to chain joins in Sequel as in ActiveRecord

我有一个模型 "MyModel" 具有以下关系:

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

使用 ActiveRecord:

MyModel.joins(:a, :b)

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

给出以下 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

但是 Sequel:

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 使用最后加入的 table 的名字?如何在 Sequel 中获得由 ActiveRecord 生成的相同 SQL?

默认情况下,在 Sequel 的 join 中,隐式限定符是最后加入的 table。

所以,

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

等于:

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

使用显式限定符:

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

这来自与@jeremyevans 的官方 Sequel IRC 聊天。