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!
失敗並引發異常,那麼將所有的回滾?Rails 3 Transactions,回滾一切
對於如何改進此代碼的任何其他建議也是受歡迎的。
我使用MySQL 46年1月5日,Rails的3.0.8和Ruby 1.9.2 – Dex 2011-06-15 02:43:16