为什么在Rails中使用Model.increment_counter时重新加载?

时间:2014-07-14 16:35:15

标签: ruby-on-rails

我正在使用Model.increment_counter(:c, 11)以便在增加列时避免竞争条件(请参阅相关内容:How do I consistently increase a counter cache column?

但是我注意到以下代码:

@order = Order.find(11)
p @order.c # This prints 4
Order.increment_counter(:c, 11)
p @order.c # This still prints 4
@order.reload
p @order.c # This prints 5

为什么在进行更新后需要重新加载对象?为什么AR没有直接显示变化?

1 个答案:

答案 0 :(得分:2)

这里的问题如下:

  • 你的记忆中有一个物品
  • 使用对象的id调用类方法
  • 您希望内存对象更新

不可能,类方法对你的内存对象一无所知。

为什么不直接在模型属性上设置值?如果有的话?