問題一覧に戻る
中級高度なデータベース
問題45: トランザクション - transactionブロック

Railsでデータベーストランザクションを使ってデータの一貫性を保証する方法を学習します。トランザクションは複数のデータベース操作をグループ化し、すべての操作が成功するか、いずれかが失敗した場合はすべてロールバックされることを保証します。これは複数の関連する変更を伴う操作でデータ整合性を維持するために重要です。

def transfer_money(from_account, to_account, amount)
# トランザクションブロックを開始
ActiveRecord::Base. do
# 送金元から引き落とし
from_account.balance -= amount
from_account.save!

# 受取人に追加
to_account.balance += amount
to_account.!

# エラー時にロールバック
if to_account.balance > 1000000
raise ActiveRecord::
end
end
end