ActiveRecord对外连接的查询不当行为?

时间:2016-10-23 14:09:01

标签: sql ruby-on-rails ruby activerecord

让我们有两个ActiveRecord模型ProductPromotion

使用外连接构建查询和连接表列的别名会产生以下无效SQL:

Product.distinct.includes(:promotion).select('promotions.advertised as featured').
references(:promotion).order('featured').limit(10).to_sql

SELECT  DISTINCT "products"."id", featured AS alias_0 FROM "products"
                                  ^^^^^^^^^^^^^^^^^^^
 LEFT OUTER JOIN "promotions" ON "promotions"."product_id" = "products"."id"  ORDER BY featured LIMIT 10

执行导致数据库错误:ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "featured" does not exist。正如所料,因为 features promotions.advertised 列的别名,未在表产品中定义。

如您所见,ActiveRecord将无效的"featured AS alias_0"表达式注入select。此外,products表的所有列({1}}除外)都被省略。

以上不当行为与同时使用idorder方法有关。当省略其中任何一个时,生成的SQL变得正确。例如,只需单击删除 limit 即可生成正确的查询:

limit

有人可以解释这种行为吗?

错误报告的候选人或我错过了什么?

使用ActiveRecord ver测试。 4.2.7.1

0 个答案:

没有答案