ruby-on-rails-3 – 无法将HashWithIndifferentAccess转换为String?

我有一个哈希发布到我的Rails应用程序,看起来像这样:

{"signed_request"=>"...","buyer"=>"1064897036","receiver"=>"1064897036","order_id"=>"224539980951036","method"=>"payments_get_items","test_mode"=>"1","order_info"=>{"description"=>"None","image_url"=>"","price"=>"1","product_url"=>"","title"=>"Premium Membership"}}

我正在借用一些代码来解析它并发回相应的响应.首先,我解析已签名的请求,该工作正常,然后我构建订单信息以将其发送回服务器.这就是麻烦开始的地方,似乎:

...
        elsif method == 'payments_get_items'

                  order_info = params[:order_info]

                  item = JSON.parse(order_info)
              item['price'] = item['price'].to_i

              # for url fields,if not prefixed by http://,prefix them
              url_key = [ 'product_url','image_url' ]
              url_key.each do |key|
                if item[key][0..6] != 'http://'
                  item[key] = "http://#{item[key]}"
                end
              end

 # if payload['test_mode']
              if request.params['test_mode']
                update_keys = ['title','description']
                update_keys.each do |key|
                    item[key] = '[Test Mode] ' + item[key]
                end
              end

              data['content'] = [item]  
            end

            data['method'] = method

            render :json => data
          end

我收到这个错误

can't convert ActiveSupport::HashWithindifferentAccess into String

这是由这条线引起的:

item = JSON.parse(order_info)

我不确定这意味着什么.替代方案,我想…是我可以让服务器传递一个项目号,然后我可以查询数据库并自己将信息作为JSON提取,而不是尝试解析哈希,但我想如果可以的话,让这项工作.有什么想法吗?

解决方法

这里没有需要解析的JSON.你的params哈希只是一个嵌套的哈希,所以你需要做的就是访问嵌套:order_info数据是item = params [:order_info]

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...