class Bear < ActiveRecord::Base
def feed!
self.transaction do
raise Exception unless self.foods_eaten << Food.new(:name => "fish")
self.fed_at = Time.now
save!
end
end
end
class Hippo < ActiveRecord::Base
def wash!
self.transaction do
@soap.inventory -= 1
@soap.save!
self.washed_at = Time.now
save!
end
end
end
class ZookeeperController < ApplicationController
def chores
@zookeeper = Zookeeper.find(params[:id])
Animal.transaction do
begin
@hippo.wash!
@bear.feed! # => FAIL AT THIS LINE
@zookeeper.finished_at = Time.now
@zookeeper.save!
redirect_to chores_completed_path
rescue Exception => e
render "new_chores"
end
end
end
end
하면 Zookeeper#chores
가 호출됩니다 및 @bear.feed!
이 실패하고 예외가 발생하고 모든 롤백 할 것인가?레일 3 트랜잭션, 롤백 모든
이 코드를 향상시키는 방법에 대한 다른 제안도 환영합니다.
을 예상대로이 실제로 작동하는 경우 3.0.8와 루비 1.9.2 – Dex