counter_cache 无效

counter_cache doesn't works

如果我在 rails 控制台(开发或单元测试环境)中执行:

u = User.first
puts u.topics_number # 0
Topic.create!(user: u)
puts u.topics_number # 0
puts u.reload
puts u.topics_number # 1

其中 topics_number 在主题 class 中是 counter_cache,例如:

belongs_to :user, counter_cache: :topics_number

topics_number 在 table 个用户中。

如何在不重新加载的情况下强制更新?

我在 after_create 中有一个过程要做,我必须获得这个 cache_counter 的良好价值!

您无法在不重新加载的情况下更新 u.topics_number。这就是 ActiveRecord 在 Rails 中的工作方式。您在特定时间获取一些东西并从中创建一个 Ruby 对象。 Ruby 对象不会自动识别数据库中在那一刻之后发生的任何事情。你必须 .reload!

您可以做的是:

puts User.first.topics_number # 0
Topic.create!(user: User.first)
puts User.first.topics_number # 1

您可以使用 where(id: u.id).first.

而不是 first 方法