Я создаю API с Ruby on Rails. Я использую драгоценный камень «виноград» для предоставления API потребителю и «spyke» для получения данных от другого API. Я обрабатываю и обогащаю данные, которые я получаю от spyke, а затем передаю их винограду.
Проблема в том, что я получаю сообщение об ошибке: undefined method key?
.
Я уже проверил данные, которые я получаю от spyke. Данные выглядят нормально (я не получаю массив, я получаю хэш). Я напечатал его с puts result
и result.class
(результат — данные, которые получает spyke).
Я погуглил сообщение об ошибке undefined method key?
. Я пробовал все «решения», предоставленные stackoverflow и другими ресурсами. Ни один из них не работал. Я даже не знаю, где именно возникла ошибка.
resource :clusters do
route_param :cluster_id do
resource :stats do
params do
requires :node, type: String, desc: 'Node name.'
end
route_param :node do
get do
present StatsNode.where(cluster_id: params[:cluster_id], node: params[:node]), with: StatsNodeEntity
end
end
end
end
end
Не знаю, важно ли это, но когда я поднимаю строку raise 'test'
перед строкой present StatsNode.where...
, в качестве ответа появляется сообщение {"response_type":"error","response":"asdf"}
. Если я поднимаю строку после строки present
, появляется начальное сообщение об ошибке.
Точное сообщение гласит: {"response_type":"error","response":"undefined method key?' for [\"_nodes\", {\"total\"=\u003e1, \"successful\"=\u003e1, \"failed\"=\u003e0}]:Array"}
Я ожидаю, что API вернет json с данными, а не с сообщением об ошибке.
Откуда это сообщение об ошибке и как я могу решить эту проблему?
РЕДАКТИРОВАТЬ:
Я использую:
- Ruby 2.5.5
- Rails 5.2.3
- последняя версия spyke
- последняя версия винограда
- версия винограда -объект последний