Ruby on Rails 3中,如何将HashWithIndifferentAccess直接转换成字符串?

2026-04-11 17:492阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计396个文字,预计阅读时间需要2分钟。

Ruby on Rails 3中,如何将HashWithIndifferentAccess直接转换成字符串?

我有一个哈希发布到我的Rails应用程序中,看起来像这样:{signed_request:...,buyer:1064897036,receiver:1064897036,order_id:224539980951036,method:payments_get_items,test_mode:1,order_info:{}}

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

Ruby on Rails 3中,如何将HashWithIndifferentAccess直接转换成字符串?

{"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 , prefix them url_key = [ 'product_url', 'image_url' ] url_key.each do |key| if item[key][0..6] != '' item[key] = "#{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]

本文共计396个文字,预计阅读时间需要2分钟。

Ruby on Rails 3中,如何将HashWithIndifferentAccess直接转换成字符串?

我有一个哈希发布到我的Rails应用程序中,看起来像这样:{signed_request:...,buyer:1064897036,receiver:1064897036,order_id:224539980951036,method:payments_get_items,test_mode:1,order_info:{}}

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

Ruby on Rails 3中,如何将HashWithIndifferentAccess直接转换成字符串?

{"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 , prefix them url_key = [ 'product_url', 'image_url' ] url_key.each do |key| if item[key][0..6] != '' item[key] = "#{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]