如何在Rails 3 AREL语句中使用"includes"?

AKW*_*KWF 2 arel ruby-on-rails-3

我试图看到SQL背后和AREL声明:

Brand.where(:subdomain => "coke").includes(:products).to_sql
Run Code Online (Sandbox Code Playgroud)

品牌has_many产品,产品属于品牌.

但是,上述声明仅产生:

"SELECT `brands`.* FROM `brands` WHERE `brands`.`subdomain` = 'coke'"
Run Code Online (Sandbox Code Playgroud)

为什么我products在SQL 中看不到表的信息?

Dyl*_*kow 7

当您使用includes语句时,Rails将为每个表生成一个单独的查询(因此,如果您包含其他2个表,则总共将有3个查询).

您可以使用一个joins语句,它会将它全部归结为一个查询,但是您可能会遇到性能损失.此外,如果您的任何where(...)条件查询包含的表,它将被集中到一个查询中.

有关Rails行为的更多信息,请参阅此其他类似问题.

  • 呃,如果查询中有条件引用该表,它将不会为每个表生成单独的查询.相反,它将使用"LEFT OUTER JOIN"和单个查询. (2认同)