回答

2

當使用counter_cache,記錄插入和計數器更新在同一事務中完成。但是這並不能保證操作的原子性。除了避免兩人更新問題之外,您可能還需要「鎖定」您的記錄。

參見this excellent article。它關於redis-objects gem,但前兩部分完美地解釋了ActiveRecord的問題和解決方案。

1

簡答:沒有。正如Cédric提到的那樣,Rails更新了事務內部的counter_cache,所以如果你說有一個後臺進程更新同一個記錄,你會發現自己會遇到死鎖錯誤,除非你使用記錄上的with_lock塊來運行這兩個更新。