Rails 4 计数器缓存不同步

8
我有一个Rails 4.2 应用程序,它带有计数器缓存(使用 belongs_to :my_model, counter_cache: true设置),但该应用程序设置了不正确的值。 我可以直接打开控制台并调用MyModel.associated_model_count获取20,然后调用MyModel.associated_model.count并获得19。 保存模型无法解决此问题。 这些值看起来没有太大偏差,但一些确实不正确,我无法找出原因。

1
你需要重现最初导致它出错的情况。一旦出错,除了手动更新计数器之外,你无能为力。 - Frederick Cheung
1
你有没有找到这个问题的答案?我也遇到了同样的情况,model_count比model.count要高。不确定怎么会发生这种情况。重置可以解决问题,但不能解决它首先失去同步的根本问题。 - bjacobs
我也是这样做的,因为我们也遇到了这个问题。我们几乎不会销毁(好吧,很少)。我在想它是否在创建失败时出现了问题? - phil
1个回答

8
为了回答你的问题并帮助你进行调试,计数器列只在createdestroy时更新,因此保存对象不会触发计数器更新。更多细节可以在这里找到:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to,其中包括:counter_cache选项条目。
如果您想要进入干净状态以便于定位问题,可以使用MyModel.reset_counters(id, *counters)手动触发计数器更新 (http://apidock.com/rails/ActiveRecord/CounterCache/reset_counters)。
有关有用答案和讨论的相关问题:Rails counter_cache not updating correctly

但是,它如何在第一次失步?而且,如果您没有进行任何删除、销毁或移动,model_count 如何比 model.count 更高? - bjacobs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接