我知道在Rails 3中为ActiveRecord对象提供了after_commit
回调。但是,我想在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
回调,因为它意味着通过让模型进行渲染来打破模型和控制器之间的分离,这是它不应该做的事情。
答案 0 :(得分:1)
这应该做你想做的事情:
def create
begin
Account.transaction do
modify_underlying_system
@acount.save!
end
render :status => 201, :json => {...}
rescue ActiveRecord::RecordInvalid
render :status => 500, :json => {...}
end
end
我没有测试它,但看起来很正确。