我正在使用 Ruby on Rails 创建一个 API。我使用 gem 'grape' 向消费者提供 api,并使用 'spyke' 从另一个 api 接收数据。我对从 spyke 收到的数据进行处理和丰富,然后将其传递给葡萄。
问题是,我收到一个错误:undefined method key?
.
我已经检查了我从 spyke 收到的数据。数据似乎没问题(我没有收到数组,我得到了一个哈希)。我已经用puts result
and打印了它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'
在 line 之前提出一个字符串时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
- 最新的葡萄 - 最新
的葡萄实体