2016-04-15 3 views
1

ich RestClient bin mit einem Post-Anforderung zu machen, und ich machte es so ich eine Fehlerantwort zurück, so kann ich, wie diese Art von Hash-Zugriff auf

diese Fehlermeldungen in der Konsole drucken kann ich versuchte, die folgenden gemäß der restclient gem Dokumentation

begin 
    response = RestClient.post base_uri, params.to_json, content_type: 'application/json', accept: 'application/json' 
rescue RestClient::ExceptionWithResponse => err 
    error = err.response 
    p "this is the error response #{error}" 
end 

wenn ich err.response drucke ich die folgende

"this is the error response {\"error\":{\"message\":\"An active access token must be used to query information about the current us er.\",\"type\":\"OAuthException\",\"code\":2500,\"fbtrace_id\":\"HTzmJ0CcIfd\"}}"

wie greife ich auf die Nachricht in der obigen Hash erhalten um es in der Konsole anzuzeigen?

versucht

p "this is the error response #{error.message}"

und es gibt mir "Bad request" - haben keine Ahnung, wo es nur geht, dass

Antwort

2

Wenn Sie nur ausgeben suchen es:

error = JSON.load(err.response) 

puts error['error']['message'] 

können Sie formatieren Sie es immer ein bisschen besser:

puts '[Code %d %s] %s' % [ 
    error['error']['code'], 
    error['error']['type'], 
    error['error']['message'] 
] 

Beachten Sie, dass die Verwendung von puts in einem Rails-Prozess nicht sehr gut funktioniert. Vielleicht möchten Sie stattdessen Rails.logger.debug verwenden.

+0

Hey danke für die Antwort versucht, die oben, aber gibt mir einen leeren String '„dies ist die Fehlerreaktion“' das ist seltsam. versuchte mit beiden puts und Rails.logger.debug –

+0

wie kann ich überprüfen? –

+0

ah es sagt, es ist ein "String" –

1

Die Antwort, die Sie erhalten haben, ist in JSON. Sie müssen zuerst den JSON dekodieren und dann mit den Daten interagieren. Ich persönlich mag MultiJson dafür:

begin 
    response = RestClient.post base_uri, params.to_json, content_type: 'application/json', accept: 'application/json' 
rescue RestClient::ExceptionWithResponse => err 
    error = MultiJson.load(err.response) 
    p "this is the error response #{error[:message]}" 
end