首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`to_a`避免重新运行查询?

`to_a`避免重新运行查询?
EN

Stack Overflow用户
提问于 2018-03-23 13:00:17
回答 1查看 343关注 0票数 0

我在控制台中注意到,to_a方法在ActiveRecord_Relation中有一个不寻常的用户。我将在下面复制它:

从表中选择变量a

代码语言:javascript
复制
a = Crypto::ExchangeQuotation.all
[DEBUG]   Crypto::ExchangeQuotation Load (121.1ms)  SELECT  "crypto_exchange_quotations".* FROM "crypto_exchange_quotations" LIMIT $1  [["LIMIT", 11]]

调用a

代码语言:javascript
复制
2.4.1 :003 > a
[DEBUG]   Crypto::ExchangeQuotation Load (0.8ms)  SELECT  "crypto_exchange_quotations".* FROM "crypto_exchange_quotations" LIMIT $1  [["LIMIT", 11]]

a数组:

代码语言:javascript
复制
2.4.1 :004 > a.to_a
[DEBUG]   Crypto::ExchangeQuotation Load (0.9ms)  SELECT "crypto_exchange_quotations".* FROM "crypto_exchange_quotations"

再次调用a

代码语言:javascript
复制
2.4.1 :005 > a
 => #<ActiveRecord::Relation [#<Crypto::ExchangeQuotation id: 1, exchange_code: "ARN", base_currency_code: "BRL", currency_code: "BTC", origin: "bitvalor", created_at: "2018-03-15 23:24:06", updated_at: "2018-03-15 23:24:06", buy: 17810.0, sell: 17810.0>,

在变量中调用to_a,然后再调用它是否真的避免了再次运行查询?如果是,为什么?因为在a中返回的仍然是ActiveRecord_Relation

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-23 14:28:49

调用to_a并不会改变基本对象,但它会复制这个对象并将其作为数组返回。下面看一下to_a的广告代码:

代码语言:javascript
复制
def to_a
  records.dup
end

若要真正将其更改为数组,必须重写变量a

代码语言:javascript
复制
a = a.to_a
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49450274

复制
相关文章

相似问题

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