如何设置新添加的ActiveRecord计数器缓存的值?

问题描述:

我有一个模型对象,它之前没有计数器缓存,我通过迁移添加它。事情是,我尝试过并且无法根据迁移中已有的子对象的数量来设置计数器缓存的初始值。任何尝试更新缓存值都没有写入数据库。我甚至试图从控制台执行它,但它永远不会发生。任何试图直接写入父级的值都被忽略。如何设置新添加的ActiveRecord计数器缓存的值?

更改更新计数器缓存(如它应该)的子项数,并从子项中删除“:counter_cache => true”会让我更新父项的值。但这是作弊。我需要能够添加计数器缓存,然后将其初始值设置为迁移中的子数,以便我可以从正确的值开始显示页面。

这样做的正确方法是什么让ActiveRecord不会覆盖我?

您要使用的update_counters方法,这个博客帖子有更多的细节:

http://josh.the-owens.com/archives/2007/11/03/rails-edge-change-how-to-add-a-counter-cache-to-an-existing-db-table/

的话题这RailsCasts也是一个很好的资源:

http://railscasts.com/episodes/23-counter-cache-column