【问题标题】:Rails 4 counter cache out of syncRails 4计数器缓存不同步
【发布时间】:2015-12-28 17:27:35
【问题描述】:

我有一个带有计数器缓存(使用belongs_to :my_model, counter_cache: true 设置)的 Rails 4.2 应用程序设置了不正确的值。我可以直接调用控制台并调用MyModel.associated_model_count 并获取20,然后调用MyModel.associated_model.count 并获取19。保存模型并不能解决此问题。

这些值似乎并没有太大的偏差,但有些肯定是偏差的,我不知道为什么。

【问题讨论】:

  • 您需要重现首先导致它出错的情况。一旦出错,您将无能为力(除了手动更新计数器)
  • 你有没有找到答案?我看到model_count高于model.count的情况相同。不知道怎么会发生。重置确实有效,但并不能解决它首先不同步的根本问题。
  • 我也喜欢这个,因为我们也看到了这个。我们从不(好吧,很少)破坏。我想知道它是否在创建失败时失败?

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord counter-cache


【解决方案1】:

为了回答您的部分问题并希望对您的调试有所帮助,计数器列仅在createdestroy 上更新,因此保存对象不会触发计数器更新。更多详细信息可以在此处选项下的:counter_cache 条目下找到:http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-belongs_to

如果您想进入干净状态,可以使用MyModel.reset_counters(id, *counters) (http://apidock.com/rails/ActiveRecord/CounterCache/reset_counters) 手动触发计数器更新,以便查明它在哪里停止。

有帮助的答案和讨论的相关问题:Rails counter_cache not updating correctly

【讨论】:

  • 但是一开始它怎么会不同步呢? model_count 怎么会比 model.count 高?假设您没有进行任何删除、破坏或移动。
猜你喜欢
  • 2017-10-26
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 2021-01-11
  • 2016-07-18
  • 1970-01-01
相关资源
最近更新 更多