答案 0 :(得分:0)
volume_prices
不是数组,而是AcitveRecord::Relation
,因此可能与它有关。我建议使用#size
而不是#length
或#count
。无论是数组还是#size
,Relation
都会始终为您提供所需的号码。
如果是关系,它将运行SQL命令进行计数,而不是查询Ruby中的所有记录和THEN计数。
[1] pry(main)> User.all.size
(0.5ms) SELECT COUNT(*) FROM `users`
=> 10
[2] pry(main)> User.all.to_a.size
User Load (0.6ms) SELECT `users`.* FROM `users`
=> 10
[3] pry(main)> User.all.length
User Load (0.4ms) SELECT `users`.* FROM `users`
=> 10
答案 1 :(得分:0)
ActiveRecord::Relation
可以加载到内存中。加载关系后,您可以在不使用查询访问数据库的情况下进行处理。
您的情况是,volume_prices
是已加载到内存中的关系,因此.length
方法将不会对数据库执行任何查询。但是,.count
将执行查询,因为ActiveRecord
中的it is a calculation method。
我认为Activerecord
size
方法中的source code是这种方法的完美示例,因为它会在确定{{1 }}和count
。
您可以通过在示例中运行以下行来检查所有这些情况:
length