2011-11-28 125 views
3

我有一個哈希被貼到我的Rails應用程序看起來像這樣:無法將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 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自己的方式提取信息,而不是試圖解析哈希,但我想如果可以的話,做這個工作。有什麼想法嗎?

回答

7

這裏沒有需要解析的JSON。你的params散列只是一個嵌套散列,所以你需要做的只是訪問嵌套的:order_info數據是item = params[:order_info]