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

イニシャル@country.total_shops2であるとすると、作成時ににインクリメントする必要がありますが、行の直後で3試してみると、まだ表示されます。ページを更新すると、が表示されます。更新が少し遅いと思います。abort(@country.total_shops)@shop.save23

どうすれば最新の値をすばやく取得できますか?

ありがとう。

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 に答える