短い:
Ruby on RailsでActiveRecordオブジェクトを保存する際の競合状態からどのように保護しますか? または、競合が検出された場合にエラーを取得する方法は少なくともありますか?
長いです:
このモデルがあると仮定します
class Game < ActiveRecord::Base
belongs_to :current_user, :class_name => "User",
:foreign_key => "current_user_id"
belongs_to :other_user, :class_name => "User",
:foreign_key => "other_user_id
end
コントローラーでゲームを作成するとき、:other_user_id が nil である最初のゲームを見つけて、ゲームを作成しようとしているユーザーに設定し、更新されたゲームを保存します。そのようなゲームが見つからない場合は、要求しているユーザーで新しいゲームを作成しますcurrent_user として。
更新されたゲームを保存する際の競合から保護する方法を示すActiveRecordのドキュメントには何も見つかりません。つまり、ユーザーbが空のゲームを見つけて、ユーザーaがゲームを見つけた後、データベースに保存することができます。データベースに保存しました。どちらかといえば、一意性の検証について読んだことは、データベース レベルでこれを修正する必要があるようです。
前もって感謝します!