2016-04-15 2 views
1

Я использую RestClient сделать пост запрос и я сделал это так я реакция на ошибку назад, так что я могу напечатать эти сообщения об ошибках в консоликак получить доступ к такого рода хэш

я попытался следующие согласно restclient самоцвет документация

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 

, когда я напечатать err.response я получаю следующее

"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\"}}"

как я доступ к сообщению в приведенном выше хеш, чтобы отобразить его в консоли?

пытался

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

и это дает мне "Bad request" - понятия не имею, где он получает, что

ответ

2

Если вы просто хотите, чтобы вывести его:

error = JSON.load(err.response) 

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

Вы можете всегда отформатировать его немного лучше:

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

Обратите внимание, что использование Rails-процесса с puts не будет работать очень хорошо. Вместо этого вы можете использовать Rails.logger.debug.

+0

Эй спасибо за ответ попытался выше, но дает мне пустую строку '«это реакция на ошибку»' это странно. пробовал как с puts, так и с Rails.logger.debug –

+0

как я могу проверить? –

+0

ах, это говорит о его «строке» –

1

Ответ, который вы получили, находится в JSON. Сначала вам нужно сначала декодировать JSON, а затем взаимодействовать с данными. Лично мне нравится MultiJson для этого:

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 
Смежные вопросы