0

使用 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

假设 initial@country.total_shops2,那么当它创建时,它应该递增到3,但是当我abort(@country.total_shops)在该行之后尝试时@shop.save,它仍然显示2。当我刷新页面时,它显示3. 我想它只是更新有点慢。

如何快速获取最新值?

谢谢。

4

1 回答 1

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
于 2013-03-23T18:04:00.477 回答