This has been resolved since Rails v4.2.4., have a look this commit and the linked issues.
< Rails v4.2.4
ActiveRecord has a feature called
counter caching
Show archive.org snapshot
where the containing record in a has_many
relationship caches the number of its children. E.g. when you have House has_many :rooms
, Rails can cache the number of rooms in House#rooms_count
.
Mind that when a model has a column that looks to Rails like a counter-cache column, Rails will apply counter-cache logic to your model, even if you're not using counter caches.
E.g. you have a house with 12 rooms, but house.rooms_count
is 0 (for whatever reason). Now house.rooms
will always be empty because Rails thinks that there is no point in querying the database.
A solution is to use another naming convention (like total_rooms
).
>= Rails v4.2.4
#has_cached_counter?
enforces that the counter_cache
option must be given on either the owner or inverse since this
commit
Show archive.org snapshot
, whereas it only looked at the presence of the attribute before.