counter_cache不起作用

时间:2015-01-30 21:09:35

标签: caching ruby-on-rails-4 activerecord rails-activerecord

如果我在rails console(dev或单元测试ENV)中执行:

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是Topic类中的counter_cache,如:

belongs_to :user, counter_cache: :topics_number

topics_number在表用户中。

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

我在after_create有一个过程,我必须得到这个cache_counter的好价值!

1 个答案:

答案 0 :(得分:1)

如果没有重新加载,则无法更新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

您可以使用first代替where(id: u.id).first方法。