Rails counter_cache更新太慢了?

时间:2013-03-23 15:51:42

标签: ruby-on-rails

使用Rails 3.我有以下内容:

# shop.rb
class Shop < ActiveRecord::Base
  belongs_to :country, :touch => true, :counter_cache => :total_shops
  ...
end

# shops_controller.rb
class ShopsController < ApplicationController  
  def create
    ...
    @shop.save
    @new_total_shops = @country.total_shops
  end
end

我们说初始@country.total_shops2,然后在创建时,它应该增加到3,但是当我尝试{{1}时在abort(@country.total_shops)行之后,它仍会显示@shop.save。刷新页面时,会显示2。我想它只是变得有点慢。

如何快速获得最新价值?

感谢。

1 个答案:

答案 0 :(得分:1)

我的猜测是,因为您(我假设)在您保存新商店之前已经加载了Country实例,所以您看到的国家/地区加载时的total_shops值就像

即。即使底层数据库值已经改变,你在内存中也有旧值。

试试这个:

@shop.save

# reload the country instance from the database
# to get the updated counter cache value
@country.reload

@new_total_shops = @country.total_shops