在ActiveRecord中左连接到没有字符串的内连接

时间:2018-01-08 16:44:02

标签: 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.joins(:bar).joins("bar LEFT OUTER JOINS baz ON etc etc"))来实现,但这样做可以防止ActiveRecord在需要在查询中的其他位置引用表时使表别名。无法别名导致"表被多次引用"我的申请中的错误。

我也尝试在连接字符串中对表进行别名,但这样做会阻止我在查询中对该表应用过滤器,而不会泄露别名的名称。

是否有办法将表连接到已经内部连接的表而不使用原始SQL字符串(即使用本机ActiveRecord)?

1 个答案:

答案 0 :(得分:1)

包含将产生左外连接。尝试类似:

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