AbstractController ::具有控制器异常处理的DoubleRenderError

时间:2012-08-15 14:11:03

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1

在我的Rails 3.1应用程序中,我在基本API控制器之上有一个rescue_from,如下所示:

rescue_from Exceptions::InvalidApiKey, :with => :invalid_api_key
invalid_api_key中的

如下所示:

def invalid_api_key
    Rails.logger.debug "Invalid API key"
    render :json => {:error => :invalid_api_key}, :status => :forbidden
end

before_filter检查API密钥并在需要时抛出InvalidApiKey异常。

但是,当我使用错误的API密钥尝试控制器时,我得到AbstractController::DoubleRenderError,因为它尝试在异常处理程序中以及原始操作中进行渲染。

我该如何避免这种情况?

1 个答案:

答案 0 :(得分:-1)

您需要return false before_filter来停止控制器链。

否则,它首先在invalid_api_key中呈现错误并使用“通常”流程进入被调用的操作(因为您已从异​​常中获救)并尝试再次从操作中进行渲染。

所以

def invalid_api_key
    Rails.logger.debug "Invalid API key"
    render :json => {:error => :invalid_api_key}, :status => :forbidden 
    false
end

应解决问题