我已经在一些资源在网上找到喜欢做的东西,当比:延迟加载3.2.6
cars = Car.where(:colour => 'black')
不执行查询,直到你做这样的事情:
cars.each {|c| puts c.name }
然而在我的Rails 3.2.6项目,当我做在控制台以下:
User.where(:first_name => "John")
我得到如下:
User Load (1.2ms) SELECT `users`.* FROM `users` WHERE `users`.`first_name` = 'John'
因此,查询正在执行的权利?
延迟加载去哪儿了?或者我在这里错过了什么?
这是在控制台的动态环境中探索(通常是富有成效的努力)实际上会导致ActiveRecord工作方式混乱的情况之一。我已经知道这种懒惰加载行为,但我偶尔也会被这个绊住。我真的很喜欢你的“假”主意。当在控制台中工作时,会尽量使我肌肉记忆的一部分。 – 2013-12-06 16:26:12
感谢您的好评!究竟哪些事情会触发查询加载ActiveRecord :: Relation对象? '拔',说? – 2015-01-09 16:40:31
@kitkat pluck运行一个只返回列值而不是AR对象的查询。像每一个,地图,拒绝,to_a等都会导致关系被加载。基本上在关系上缺少一个方法来加载目标并将方法调用转发给它。 – 2015-01-09 22:26:41