Ruby on Rails
ActiveRecordトランザクション
サーチ…
前書き
ActiveRecord Transactionsは保護ブロックです。アクティブなレコードクエリのシーケンスは、すべてが1つのアトミックアクションとして成功することができれば永続的です。
アクティブレコードトランザクションの開始
アクティブレコードトランザクションは、モデルクラスとモデルインスタンスに適用でき、トランザクションブロック内のオブジェクトはすべて同じクラスのインスタンスである必要はありません。これは、トランザクションがモデル単位ではなくデータベース単位の接続であるためです。例えば:
User.transaction do
account.save!
profile.save!
print "All saves success, returning 1"
return 1
end
rescue_from ActiveRecord::RecordInvalid do |exception|
print "Exception thrown, transaction rolledback"
render_error "failure", exception.record.errors.full_messages.to_sentence
end
save with a bangを使用すると、例外がスローされたときにトランザクションが自動的にロールバックされ、ロールバック後に例外のレスキューブロックに制御が移ります。 あなたが保存からスローされた例外を救助することを確認してください!トランザクションブロックで
save!を使用したくない場合は、saveが失敗したときにraise ActiveRecord::Rollback
手動で発生させることができます。この例外を処理する必要はありません。トランザクションをロールバックし、トランザクションブロック後に次のステートメントに制御を移します。
User.transaction do
if account.save && profile.save
print "All saves success, returning 1"
return 1
else
raise ActiveRecord::Rollback
end
end
print "Transaction Rolled Back"
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow