for_commit for rails controller

我知道在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
回调,因为它意味着通过让模型进行渲染来打破模型和控制器之间的分离,这是它不应该做的事情。     
已邀请:
这应该做你想做的事情:
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
我没有测试它,但看起来很正确。     

要回复问题请先登录注册