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