TypeError:处理多种哈希值

时间:2017-03-22 03:25:50

标签: ruby-on-rails ruby

我正从外部服务中收到这些格式中的任何一种。

#successCase:如果使用正确的状态代码抛出成功/错误

{:sellerid=>2200, :status=>"success"}

#failureCase:因意外错误而收到此类哈希并导致错误

{:property=>"instance.seller_mobile", :message=>"does not meet maximum length of 10", :schema=>{:type=>"string", :required=>true, :minLength=>1, :maxLength=>10}, :instance=>"01234ssss56789", :stack=>"instance.seller_mobile does not meet maximum length of 10"}

这就是我对响应的处理方式,这是错误发生的地方(我认为)

`if response[:status] == 'success'` 
#doing something
elsif response[:status] == 'error'
#doing something
end

如果 #successCase:响应,这可以正常工作。但如果 #failureCase:收到错误

  

类型错误:          没有将符号隐式转换为整数

我可以在Failure/Error: if parsed_response[:status] == 'success'

看到它出现错误

有人可以告诉我如何解决这个问题吗?

  

PS:“我在控制台试了一下,它似乎正常工作,但铁路投掷错误”

1 个答案:

答案 0 :(得分:0)

我遇到了类似问题,您可以在获得回复后尝试致电response.stringify_keys,然后使用response["status"] == 'success'代替response[:status] == 'success'

如果您可以触摸外部服务中的代码。在响应结果之前,您可以调用to_json,这会将符号键转换为字符串键。

# in rails console
> response = {status: 'success', sellerid: 2200}
=> {:status=>"success", :sellerid=>2200} #symbol key
> response = {"status" => 'success', "sellerid" => 2200}
=> {"status"=>"success", "sellerid"=>2200}          
> response.to_json
=> "{\"status\":\"success\",\"sellerid\":2200}"

之后,只需致电response["status"] == 'success'