011*_*112 24 mysql activerecord ruby-on-rails rails-console ruby-on-rails-4
我一直在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 []>
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我怎么让它停下来?
Max*_*iel 48
AND (1=0)
当您查询其值为空数组的列时,Rails将生成SQL :
Child.where(id: [])
Run Code Online (Sandbox Code Playgroud)
直观地说,您希望生成类似SQL SELECT * FROM children WHERE id IN ()
,但()
实际上并不是有效的SQL.但是,由于没有行会匹配该查询,因此Rails通过生成同样不返回任何行的等效查询来解决此问题:
SELECT * FROM children WHERE 1=0;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3807 次 |
最近记录: |