我正在尝试查看SQL背后和AREL声明:
Brand.where(:subdomain => "coke").includes(:products).to_sql
品牌has_many产品,产品属于品牌。
但是,上述声明仅产生:
"SELECT `brands`.* FROM `brands` WHERE `brands`.`subdomain` = 'coke'"
为什么我在SQL中看不到products
表的信息?
答案 0 :(得分:6)
当您使用includes
语句时,Rails将为每个表生成一个单独的查询(因此,如果您包含其他2个表,则总共将有3个查询)。
您可以使用joins
语句,它会将其全部归为一个查询,但是您可能会遇到性能损失。此外,如果您的任何where(...)
条件查询包含的表,它将被归为一个查询。
有关Rails行为的更多信息,请参阅this other similar question。