2013-03-23 43 views
0

使用Rails 3.我有以下几点:Rails counter_cache更新太慢?

# 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,但是当我尝试abort(@country.total_shops)@shop.save之后,它仍然显示2。当我刷新页面时,它显示3。我想它只是得到更新有点慢。

如何快速获得最新值?

谢谢。

+0

当执行“创造”的方法,是页面本身刷新,错误的结果显示其执行“创造”(这样的“表演结束后轨显示在页面上“),还是在自定义视图中发生? – Cninroh 2013-03-23 16:03:18

+0

页面未自行刷新。我实际上想将'@ new_total_shops'传递给javascript视图以进行ajax更新。 – Victor 2013-03-23 16:09:03

+0

如果您在“@ shop.save”之前移动“@new_total_shops = @ country.total_shops”,会发生什么情况?你可以总是包装在交易中的一致性 - ActiveRecord :: Base.transaction做...结束 – Cninroh 2013-03-23 16:14:16

回答

1

我的猜测是,由于您已经(我假设)在保存新商店之前已经加载了Country实例,因此您会看到total_shops的值与国家/地区加载时的值。

I.e.尽管基础数据库值已更改,但您已获得内存中的旧值。

试试这个:

@shop.save 

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

@new_total_shops = @country.total_shops