Rails Tips – Counter Cache (.size vs .count)

* Size (rails function) is more intelligent than count (ruby function)
* Notice that when you counter cache, size makes only one call to db as opposed to count which does 2 queries.


1.9.2-p320 :057 > ParentModel.find(5765).childmodel.count
RequestedTrip Load (0.3ms) SELECT `parent_models`.* FROM `parent_models` WHERE (`parent_models`.`id` = 5765) ORDER BY parent_models.created_at desc LIMIT 1
SQL (6.9ms) SELECT COUNT(*) FROM `childmodels` WHERE (`quotes`.requested_trip_id = 5765)
=> 5


1.9.2-p320 :058 > ParentModel.find(5765).childmodel.size
RequestedTrip Load (0.4ms) SELECT `parent_models`.* FROM `parent_models` WHERE (`parent_models`.`id` = 5765) ORDER BY parent_models.created_at desc LIMIT 1
=> 5

You can view all queries to db for commands in rails console by redirecting the logs using following commands:

ActiveRecord::Base.logger = Logger.new(STDOUT)
ActiveRecord::Base.clear_active_connections!

Comments