Согласно коду ActiveResource (lib / active_resource / base.rb):
# <tt>404</tt> is just one of the HTTP error response codes that Active Resource will handle with its own exception. The
# following HTTP response codes will also result in these exceptions:
#
# * 200..399 - Valid response. No exceptions, other than these redirects:
# * 301, 302, 303, 307 - ActiveResource::Redirection
# * 400 - ActiveResource::BadRequest
# * 401 - ActiveResource::UnauthorizedAccess
# * 403 - ActiveResource::ForbiddenAccess
# * 404 - ActiveResource::ResourceNotFound
...
# * 422 - ActiveResource::ResourceInvalid (rescued by save as validation errors)
Таким образом, это означает, что 422 были спасены с помощью сохранения при проверке, которое происходит при запуске .create, и вместо этого всплывают как ошибки проверки.
Глядя на lib / active_resource / validations.rb, вы видите, что исключение ResourceInvalid сожрано:
# Validate a resource and save (POST) it to the remote web service.
# If any local validations fail - the save (POST) will not be attempted.
def save_with_validation(options={})
perform_validation = options[:validate] != false
# clear the remote validations so they don't interfere with the local
# ones. Otherwise we get an endless loop and can never change the
# fields so as to make the resource valid.
@remote_errors = nil
if perform_validation && valid? || !perform_validation
save_without_validation
true
else
false
end
rescue ResourceInvalid => error
# cache the remote errors because every call to <tt>valid?</tt> clears
# all errors. We must keep a copy to add these back after local
# validations.
@remote_errors = error
load_remote_errors(@remote_errors, true)
false
end
Так что мне интересно, регистрируется ли, что произошло исключение, но на самом деле не вызывает исключение, потому что оно превращает его в возвращаемое значение false. Он говорит «локальные проверки» в комментарии, но устанавливает remote_errors, поэтому не совсем понятно, где выполняется этот путь кода.