假设有三种模型,例如,房子、墙和门(房子有墙,墙有许多门):
house应该为所有相关墙的所有门设置一个counter cache列,因为这是一个相当昂贵的查询。
为了更新此列,我在door模型中使用after_create和after_destroy回调,这将成功触发以下方法:

def increase_house_doors_count
  House.increment_counter(:doors_count, house.id)
end

def decrease_house_doors_count
  House.decrement_counter(:doors_count, house.id)
end

“房子”是一种方法:
def house
  wall.house
end

最初,我使用了一个稍有不同但(IMO)更简单的版本:
def increase_house_doors_count
  house.increment(:doors_count)
end

def decrease_house_doors_count
  house.decrement(:doors_count)
end

但是后一个版本在模型中使用时并没有更新计数器。不过,直接从控制台运行代码是成功的。
我错过了什么?
干杯!

最佳答案

也许这样试试:
房屋增值!(:门计数)
也许这需要在适当的地方完成。

关于ruby-on-rails - Rails中的计数器缓存:“increment_counter”有效,“increment”无效吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4617703/

10-14 06:04