以前,关系计算,如count ,即使传递了一个矛盾,也会进行查询,矛盾关系意味着传递一个空数组,例如:-。
User.where(id: []).count
对于这样的矛盾关系,调用数据库是没有意义的。
之前
因此,在Rails 7被引入之前,如果用于count,sum,average,minimum 和maximum 的关系是矛盾的,就会调用数据库。
=> Product.where(title: []).count
Product Count (4.7ms) SELECT COUNT(*) FROM "products" WHERE 1=0
=> 0
=> Product.where(title: []).sum(:price)
Product Sum (17.5ms) SELECT SUM("products"."price") FROM "products" WHERE 1=0
=> 0
=> Product.where(title: []).average(:price)
Product Average (3.5ms) SELECT AVG("products"."price") FROM "products" WHERE 1=0
=> nil
=> Product.where(title: []).minimum(:id)
Product Minimum (5.0ms) SELECT MIN("products"."id") FROM "products" WHERE 1=0
=> nil
=> Product.where(title: []).maximum(:id)
Product Minimum (5.0ms) SELECT MAX("products"."id") FROM "products" WHERE 1=0
=> nil
可以看出,即使在传递矛盾关系时,它也会向数据库进行查询。
之后
现在在Rails 7之后,它避免了对数据库进行查询。
=> Product.where(title: []).count
=> 0
=> Product.where(title: []).sum(:price)
=> 0
=> Product.where(title: []).average(:price)
=> nil
=> Product.where(title: []).minimum(:id)
=> nil
=> Product.where(title: []).maximum(:id)
=> nil