1
我知道一個after_commit
回調被提供給Rails 3中的ActiveRecord對象。不過,我想在Rails控制器中訪問這個功能。after_commit for rails控制器
的目的是做這樣的事情在控制器:
rescue_from AccountError, :with => :render_internal_error
after_commit :render_created, :on => :create
def create
Account.transaction do
modify_underlying_system
@account.save!
end
end
protected
def render_created
render :status => 201, :json => {...}
end
def render_internal_error
render :status => 500, :json => {...}
end
有沒有一些方法,我可以實現這一目標?我不想使用ActiveRecord after_commit
回調,因爲它意味着通過讓模型進行渲染來打破模型和控制器之間的分離,這是它不應該做的事情。
這是我的第一個方法。它對我來說效果不好,因爲我有許多可能來自modify_underlying_system調用的異常。爲此,我使用rescue_from,但我認爲在事務成功時必須有更簡潔的方式發送成功響應。有什麼方法可以確定交易是否成功? – rmk 2011-04-01 20:44:16
我不這麼認爲,你唯一能做的就是檢查事務中拋出的異常。在您的modify_underlying_system調用中調用的任何保存應該也會導致RecordInvalid異常,所以它應該可以工作。你可以看看ActiveRecord :: Rollback異常,但我不確定這是否真的流入開始/救援部分。 – ctide 2011-04-01 20:53:10
看起來像你給了我*僅*回答:) – rmk 2011-04-11 17:54:10