【发布时间】:2014-11-07 03:14:07
【问题描述】:
我一直在 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 []>
为什么会这样?如何让它停止?
【问题讨论】:
-
我注意到 Rails 为这个查询做了这个:
User.where(:id => []),因为你不能在 SQL 中写SELECT * FROM users WHERE id in ()。所以我想这是它知道不会返回任何内容但不能用 SQL 表达的查询的方法。 -
@MaxGabriel 这就是我的答案。也许把它作为答案而不是评论?
-
@jgraft 好主意,我按照你的建议做了这个答案。
标签: mysql ruby-on-rails activerecord ruby-on-rails-4 rails-console