Tag: 之间

为什么Rails使用带有范围的where子句哈希语法向查询添加“OR 1 = 0”?

我正在研究的项目是在RDS上使用MySQL(特别是mysql2 gem)。 当我使用包含where语句中的范围的条件的哈希时,我的查询有点奇怪。 User.where(id: [1..5]) 和 User.where(id: [1…5]) 分别导致以下查询: SELECT `users`.* FROM `users` WHERE ((`users`.`id` BETWEEN 1 AND 5 OR 1=0)) SELECT `users`.* FROM `users` WHERE ((`users`.`id` >= 1 AND `users`.`id` < 5 OR 1=0)) 查询工作完全正常,因为OR FALSE实际上是无操作。 我只是想知道为什么Rails或ARel将这个片段添加到查询中。 编辑 看起来可以解释这一点的行是ActiveRecord::PredicateBuilder第26行 。 仍然不知道哈希是如何empty? 在那一点,但也许别人做。 编辑2 这是有趣的。 我正在调查菲利普的评论,看看为什么他这样做,因为它似乎就像澄清一样,但他是正确的1..5 != [1..5] 。 前者是1到5的包含范围,后者是第一个元素是前者的数组。 我尝试将这些放入ARel where调用查看生成的SQL并且OR 1=0不存在! User.where(id: 1..5) […]