私は自分のテーブルフィールドの値の一意性を強制しようとしています。テーブルの変更はオプションではありません。条件付きでテーブルに行を挿入するには、ActiveRecordを使用する必要がありますが、私は同期が心配です。Railsのレース条件first_or_create
Rails ActiveRecordのfirst_or_create
は競合状態を防ぎますか?
これはGitHubのからfirst_or_create
のソースコードです:
def first_or_create(attributes = nil, options = {}, &block)
first || create(attributes, options, &block)
end
はそれが重複したエントリが複数のプロセスとの同期の問題のためにデータベースをもたらすことは可能ですか?
ARはこのような競合状態でいっぱいです。 – dbenhur
参照(SO dup)[私のRailsアプリケーションの競合状態を避けるにはどうすればいいですか?](http://stackoverflow.com/questions/3037029/how-do-i-avoid-a-race-condition-in-my -rails-app)とRails Cookbook [オプティミスティックロックによる競合条件の回避](http://underpop.free.fr/r/ruby-on-rails/cookbook/I_0596527314_CHP_3_SECT_19.html) – dbenhur
@dbenhur - 私は使用できませんオプティミスティック・ロックは、表にフィールドを追加するためです。私の条件の1つは、フィールドを重複しないように追加することができないということでした。 –