刹车工不喜欢救援
Brakeman does not like rescue
我在一个模型中有这个方法,里面有这个代码。它调用 gem 和 returns 我想要的对象或找不到 404 资源。如果我在 404 上执行一个方法,那么我需要如下所示拯救它。如果我只是使用 rescue,linter 就会失败。如果我这样做,这个刹车员就会失败。
find_object
return_object = Rails.cache.fetch(cache_key + '/variableInsideObject') do
GemClient.find(id).variableInsideObject
rescue HttpServices::ResourceNotFoundError
raise ApplicationController::ExternalServiceError,
"variable inside object not found for id: #{id}"
end
end
如何在不让 linter 和 brakeman 失败的情况下挽救这个错误。
Imo 这是此代码的更 Ruby 风格的实现:
def find_object
return_object = begin
Rails.cache.fetch(cache_key + '/variableInsideObject') do
GemClient.find(id).variableInsideObject
end
rescue HttpServices::ResourceNotFoundError => e
Rails.logger.error(e)
raise ApplicationController::ExternalServiceError,
"variable inside object not found for id: #{id}"
end
end
当然,如果不知道 linter 或 brakeman 到底在抱怨什么,就很难说......但这应该更好。您当然不需要使用开始结束块,但有时 linters/community 发现它更整洁...
我在一个模型中有这个方法,里面有这个代码。它调用 gem 和 returns 我想要的对象或找不到 404 资源。如果我在 404 上执行一个方法,那么我需要如下所示拯救它。如果我只是使用 rescue,linter 就会失败。如果我这样做,这个刹车员就会失败。
find_object
return_object = Rails.cache.fetch(cache_key + '/variableInsideObject') do
GemClient.find(id).variableInsideObject
rescue HttpServices::ResourceNotFoundError
raise ApplicationController::ExternalServiceError,
"variable inside object not found for id: #{id}"
end
end
如何在不让 linter 和 brakeman 失败的情况下挽救这个错误。
Imo 这是此代码的更 Ruby 风格的实现:
def find_object
return_object = begin
Rails.cache.fetch(cache_key + '/variableInsideObject') do
GemClient.find(id).variableInsideObject
end
rescue HttpServices::ResourceNotFoundError => e
Rails.logger.error(e)
raise ApplicationController::ExternalServiceError,
"variable inside object not found for id: #{id}"
end
end
当然,如果不知道 linter 或 brakeman 到底在抱怨什么,就很难说......但这应该更好。您当然不需要使用开始结束块,但有时 linters/community 发现它更整洁...