Hi Marc & Richard, I'd categorize this as a bug. When generating a cache_version for a collection, one solution might be to include a hash of the IDs of all items in the collection. This way, the cache_version will change should an item be removed.
I believe modifying the compute_cache_version method defined in activerecord/lib/active_record/relation.rb <https://github.com/rails/rails/blob/master/activerecord/lib/active_record/relation.rb> is the way to go about this. Marc, please let me know if you intend to submit a pull request. While I'm not on the Rails team, I'd be happy to offer any assistance and lobby for implementing a fix. (If you're not interested in submitting a PR, I'd be excited to pick this up myself.) On Sun, Oct 27, 2019 at 10:41 AM Marc Köhlbrugge <marckohlbru...@gmail.com> wrote: > 👍 https://github.com/rails/rails/issues/37555 > > I did find a few similar issues, but they all got marked as stale > > https://github.com/rails/rails/issues/34408 > https://github.com/rails/rails/issues/31996 > https://github.com/rails/rails/issues/34093 > > I'm surprised this doesn't appear to be a bigger problem. Perhaps I'm not > supposed to fragment cache my paginated results. Using collection caching > (`render collection: @posts, cached: true`) might be performant enough. > > On Sunday, October 27, 2019 at 2:55:18 PM UTC+1, richard schneeman wrote: >> >> Sounds like a bug. Can you move into an issue? >> >> >> >> On Thu, Oct 24, 2019 at 7:52 PM Marc Köhlbrugge <h...@marckohlbrugge.com> >> wrote: >> >>> I'm running into a problem when using fragment caching with active >>> record collections. >>> >>> Rails 6 uses a combination of collection.cache_key and >>> collection.cache_version to determine whether a fragment cache is fresh or >>> not. However, there is a scenario where the collection might change while >>> collection.cache_key and collection.cache_version stay the same. >>> >>> It happens when you use a limit on the collection and then destroy one >>> of those records, as long as it's not the most recent one. This way >>> collection.cache_key will stay the same, because the query does not change. >>> And collection.cache_version will stay the same as well, because the >>> collection count will remain unchanged as does the maximum updated_at >>> timestamp of the most recent record. >>> >>> I've build a sample app for demonstration purposes: >>> >>> https://github.com/marckohlbrugge/rails-6-collection-caching-bug >>> >>> The readme describes a way to reproduce the issue via the website >>> itself, or the Rails console. >>> >>> Would this be considered a bug or expected behavior? Are there any known >>> work arounds? >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Ruby on Rails: Core" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to rubyonra...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/rubyonrails-core/4cc0ae69-c736-48d0-bd84-8b3f44dc879d%40googlegroups.com >>> <https://groups.google.com/d/msgid/rubyonrails-core/4cc0ae69-c736-48d0-bd84-8b3f44dc879d%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> Richard Schneeman >> https://www.schneems.com >> > -- > You received this message because you are subscribed to the Google Groups > "Ruby on Rails: Core" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to rubyonrails-core+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/rubyonrails-core/6590103e-3528-4896-bc07-e6ff6a194bef%40googlegroups.com > <https://groups.google.com/d/msgid/rubyonrails-core/6590103e-3528-4896-bc07-e6ff6a194bef%40googlegroups.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "Ruby on Rails: Core" group. To unsubscribe from this group and stop receiving emails from it, send an email to rubyonrails-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/rubyonrails-core/CAEJZ43iCipyOZddZAT1WCrtQ7g7VRLeokgLRGcYroK-TvGoGWw%40mail.gmail.com.