I have a Page
model with PT configured. I also have a Versions::PageVersion
model because page versions are stored in a separate table (page_versions
). The Page
model has a column for counter cache, called page_versions_count
. So far, everything is pretty standard.
To make the counter cache work, I've overwritten the belongs_to :item
association on the version model, which looks as follows:
class Versions::PageVersion < PaperTrail::Version
belongs_to :item,
polymorphic: true,
counter_cache: true
end
This actually works, but I'm wondering now if that's the right way to do it.
PT does not provide a way to configure the belongs_to :item
association. The association options are hard-coded in paper_trail/version_concern.rb:18.
AFAICT, re-defining an association, as you have done, is supported by AR. The new options (including counter_cache
) replace (rather than merge with) the old options. I've confirmed this experimentally using ActiveRecord::Reflection
, but can't find official docs acknowledging this.
So, your solution is the best that I can think of.
If you'd like to contribute your solution to the docs, I'd happily review a PR. I'd suggest somewhere near section "5.b. Configuring the versions Association".