ActiveRecord:大小与数量

在Rails中,您可以使用Model.sizeModel.count找到记录的数量。 如果你正在处理更复杂的查询,那么使用其中一种方法会有什么好处? 他们有什么不同?

例如,我有照片的用户。 如果我想显示一张用户表以及他们有多少照片,那么运行user.photos.size许多实例会比user.photos.count更快或更慢。

谢谢!


你应该阅读,它仍然有效。

您将根据您的需求调整您使用的功能。

基本上:

  • 如果你已经加载了所有的条目,比如User.all ,那么你应该使用length来避免另一个db查询

  • 如果你没有加载任何东西,可以使用count在你的db上进行计数查询

  • 如果您不想考虑这些考虑因素,请使用适合的size


  • 正如其他答案所述:

  • count将执行SQL COUNT查询
  • length将计算结果数组的长度
  • size将尝试挑选出最合适的两个以避免过多查询
  • 但还有一件事。 我们注意到一个案件的sizecount / 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来获取整数而不是散列

    链接地址: http://www.djcxy.com/p/49723.html

    上一篇: ActiveRecord: size vs count

    下一篇: Rails naming convention for Uppercase names