Ruby on rails 左连接到ActiveRecord中没有字符串的内部连接

Ruby on rails 左连接到ActiveRecord中没有字符串的内部连接,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试在Rails 5.1.3中构造一个查询,该查询将一个关联左连接到一个我已内部连接的关联-请参见以下模型的伪代码示例 # Foo has_many :bar # Bar belongs_to :foo; has_many :baz # Baz belongs_to :bar Foo.joins(Bar.left_joins(:baz)) # obviously doesn't work, but that's the gist 通常,这可以通过将自定义联接编写为字符串来实现,即Foo.

我正在尝试在Rails 5.1.3中构造一个查询,该查询将一个关联左连接到一个我已内部连接的关联-请参见以下模型的伪代码示例

# Foo has_many :bar
# Bar belongs_to :foo; has_many :baz
# Baz belongs_to :bar
Foo.joins(Bar.left_joins(:baz)) # obviously doesn't work, but that's the gist
通常,这可以通过将自定义联接编写为字符串来实现,即
Foo.joins(:bar).joins(“bar LEFT-OUTER-joins-baz-ON等”)
,但这样做可以防止ActiveRecord在需要在查询中的其他位置引用该表时对其使用别名。无法使用别名导致应用程序中出现“多次引用表”错误

我也尝试在联接字符串中为该表添加别名,但这样做会阻止我在查询中对该表应用筛选器,而不会公开别名的名称


有没有一种方法可以在不使用原始SQL字符串(即使用本机ActiveRecord)的情况下将表左键联接到已进行内部联接的表?

Includes将生成左键联接。尝试以下方法:

Foo.joins(:bars).includes(bars: :bazs)

干杯-如果我在
includes
中重述整个关系,我假设它会创建重复的左连接,但它看起来像
Foo.joins(bar::baz).includes(bar:{baz::qux})
正确解析内部/左侧外部连接。