問題一覧に戻る
中級高度なデータベース
問題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