Reputation: 11929
Hi all I'm using active_resource and have next question. sometimes there is destroy validation needed Example
def destroy
if @user.destroy
head :ok
else
respond_with(@user)
end
end
user model can't be deleted in few cases. If it wasn't delete @user
contains errors after validation before_delete
and responder serialize it like that
=> {\"errors\":{\"id\":[\"Cannot delete user with orders\"]}}
but active_resource don't handle such response and fails with
ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = .
what is the best way to handle such situations?
Upvotes: 2
Views: 1119
Reputation: 11929
so I did this way
module ActiveResource
class Base
def destroy_with_validation
begin
destroy
rescue ActiveResource::ResourceInvalid=>error
@remote_errors = error
load_remote_errors(@remote_errors, true)
return false
end
end
end
Upvotes: 2
Reputation: 4400
I have never used ActiveResource so far, however I think this is the right way to implement a destroy method... or at least it's the REST way.
You said ActiveResource doesn't handle such response, but actually that's exactly the opposite. The ActiveResource::ResourceInvalid error is raised because of the 422 (Unprocessable Entity) response.
More infos here : API ActiveResource
Here is what the Resource errors part says :
The following HTTP response codes will also result in these exceptions:
...
422 - ActiveResource::ResourceInvalid (rescued by save as validation errors)
To sum up, these errors allow you to handle and behave accurately depending on the status code returned. For instance you don't act the same way whether the response is a 503 (Service Unavailable) or a 422 (Unprocessable Entity). In first case you will probably said "Try again later" and in the second one "Cannot do that because of [message returned]".
Upvotes: 1