我一直在Rails控制台里尝试让事情正常运行,发现其中一个查询不应返回nil。查看生成的SQL查询后,我发现每次都附加了AND (1=0)
。这有点让人恼火,而且我不知道为什么会这样。
注意:使用了actable gem。
重现步骤:
(连接到Rails控制台后)
2.1.2 :xxxx > @parent = Parent.take
Parent Load (38.1ms) SELECT `parents`.* FROM `parents` LIMIT 1
=> #<Parent id: 37, ...>
2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id)
SQL (0.7ms) SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs`
...
LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = 'child type' WHERE `childs`.`id` = 20 AND (1=0)
=> #<ActiveRecord::Relation []>
为什么会发生这种情况?我该如何让它停止?
User.where(:id => [])
,因为你无法在SQL中编写SELECT * FROM users WHERE id in ()
。因此,我猜这是它用于已知返回空结果集的查询的方法,但却无法用SQL表示。 - MaxGabriel