Antwort

2

Wenn counter_cache verwenden, das Datensatz einfügen und die Zähleraktualisierung wird in der gleichen Transaktion durchgeführt. Dies garantiert jedoch nicht die Atomarität einer Operation. Möglicherweise müssen Sie Ihren Datensatz zusätzlich "sperren", um zu vermeiden, dass das Problem mit zwei Personen auftritt.

Siehe this excellent article. Es geht um das redis-objects-Juwel, aber die ersten beiden Teile erklären das Problem und die Lösung mit ActiveRecord perfekt.

1

Kurze Antwort: Nein. Wie Cédric erwähnt, aktualisiert Rails die counter_cache innerhalb einer Transaktion, also wenn Sie sagen, haben einen Hintergrundprozess, der den gleichen Datensatz aktualisiert, werden Sie feststellen, Deadlock-Fehler, wenn Sie beide Updates mit einem with_lock Block auf dem Datensatz ausführen.