ActiveRecord:大小与数量
在Rails中,您可以使用Model.size
和Model.count
找到记录的数量。 如果你正在处理更复杂的查询,那么使用其中一种方法会有什么好处? 他们有什么不同?
例如,我有照片的用户。 如果我想显示一张用户表以及他们有多少照片,那么运行user.photos.size
许多实例会比user.photos.count
更快或更慢。
谢谢!
你应该阅读,它仍然有效。
您将根据您的需求调整您使用的功能。
基本上:
如果你已经加载了所有的条目,比如User.all
,那么你应该使用length
来避免另一个db查询
如果你没有加载任何东西,可以使用count
在你的db上进行计数查询
如果您不想考虑这些考虑因素,请使用适合的size
正如其他答案所述:
count
将执行SQL COUNT
查询 length
将计算结果数组的长度 size
将尝试挑选出最合适的两个以避免过多查询 但还有一件事。 我们注意到一个案件的size
在count
/ length
完全不同,我想我会分享它,因为它很少被忽视。
如果在has_many
关联上使用:counter_cache
,则size
将直接使用缓存计数,并且根本不会生成额外的查询。
class Image < ActiveRecord::Base
belongs_to :product, counter_cache: true
end
class Product < ActiveRecord::Base
has_many :images
end
> product = Product.first # query, load product into memory
> product.images.size # no query, reads the :images_count column
> product.images.count # query, SQL COUNT
> product.images.length # query, loads images into memory
这种行为记录在Rails指南中,但是我第一次错过了它或者忘记了它。
有时size
“挑错了”,并返回一个散列 (这是count
会做的)
在这种情况下,使用length
来获取整数而不是散列 。