2013-03-23 74 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