首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3.2.6中的延迟加载

Rails 3.2.6中的延迟加载
EN

Stack Overflow用户
提问于 2012-07-28 23:33:35
回答 3查看 4.4K关注 0票数 17

我在网上找到了一些资源,而不是在做一些事情时,比如:

代码语言:javascript
复制
cars = Car.where(:colour => 'black')

查询不会执行,直到您执行以下操作:

代码语言:javascript
复制
cars.each {|c| puts c.name } 

然而,在我的Rails 3.2.6项目中,当我在控制台中执行以下操作时:

代码语言:javascript
复制
User.where(:first_name => "John")

我得到了以下信息:

代码语言:javascript
复制
 User Load (1.2ms)  SELECT `users`.* FROM `users` WHERE `users`.`first_name` = 'John'

那么,查询正在被执行,对吗?

延迟加载到哪里去了?还是我错过了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-28 23:43:04

控制台对您键入的任何表达式的结果调用inspect,以便它可以向您显示结果。inspect是将触发查询加载的内容之一。如果你这样做了

代码语言:javascript
复制
x = User.where(:first_name => 'John'); false

那么您应该看不到任何查询,因为这次控制台调用的是false上的inspect,而不是Active Record关系对象上的inspect。

票数 34
EN

Stack Overflow用户

发布于 2012-07-29 00:04:55

这是一个有趣的question....The答案,当在IRB/console中执行某些东西时,它会在结果对象上调用inspect,然后将其打印出来。如果你做了这样的事情:

代码语言:javascript
复制
User.where(:first_name => "John").class

您应该得到一个ActiveRecord::Relation对象。

所以Rails的延迟加载仍然有效,这只是控制台的工作方式。

希望这能有所帮助。

来源: 1) https://rails.lighthouseapp.com/projects/8994/tickets/4951-rails-console-executes-where-queries-without-lazy-loading 2) Why Active Record relation is not returned in console?

票数 3
EN

Stack Overflow用户

发布于 2015-03-19 08:38:41

我使用sqllite3运行了一个测试,试图找出AR Base find是否立即执行了查询。下面是我所做的:

代码语言:javascript
复制
rows=Customer.orders.find(1,2)

然后我做到了:

代码语言:javascript
复制
ActiveRecord::Base.remove_connection;
p rows

我收到一个未建立连接的错误。

在没有删除连接的查询之后,我还立即尝试了"p row“,得到了我期望的2行。

这是使用activerecord-3.1.3完成的。我的结论是,在3.1.3中,base find会等待查询,直到数组(关系?)是访问的。

我是Ruby的新手,所以我的测试可能设计得不正确。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11702341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档