在我的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
,因为它尝试在异常处理程序中以及原始操作中进行渲染。
我该如何避免这种情况?
答案 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
应解决问题