Rails アプリでは、シリアル番号として使用する一意の連続した (ギャップのない) 整数のソースが必要です。永続的であり、同時アクセスを許可する必要があります。
データベースの自動インクリメントは、ほとんどが「ギャップなし」のプロパティを保証しないため、適切ではありません。
単純な SQL では、1 行のテーブルを作成し、(PostgreSQL では) 次のように言います。
update sequence set value = value + 1 returning value
これは、SQL の世界では明らかに標準的な方法です。参照が存在します。
ActiveRecord では、モデルを簡単に作成し、ドキュメントで見つけまし.increment!
た.increment_counter
。しかし、インクリメントされた値をアトミックに取得する方法がわかりません。ロックとトランザクションは役に立たないようです。