2014-01-27 68 views
3

我試圖將我的控制器配置爲處理通過POST從另一個網站發送的參數。我的日誌顯示我收到的參數如下:無法在Rails控制器中從POST中提取嵌套的JSON數據

{「page_id」=>「8b62f4ac-8588-11e3-a094-12314000b04c」,「page_name」=>「test form」,「variant」=> 「b」,「page_url」=>「http://get.xxxxxxx.com/test-form」,「data.json」=>「{\」name \「:[\」Dave \「],\」email \「:[\」[email protected] \「phone \」:[\「4447177265 \」],\「ip_address \」:[\「64.114.175.126 \」],\「time_submitted \」:[\「07:34 UTC UTC \」 ]}」, 「data.xml中」=> 「\ n \ n戴夫\ n [email protected] \ n 2507177265 \ n 64.114.175.126 \ n上午07時34分UTC \ n」 個}

最初我想Rails會自動解析參數中的JSON,我可以用正常的方式訪問它們。所以我寫了這樣的註冊控制器:

class Api::RegistrationsController < Devise::RegistrationsController 

    skip_before_filter :verify_authenticity_token 
    respond_to :json 

    def create 

    @user = User.new(user_params) 

    if @user.save 
     render json: @user.as_json(email: @user.email), status: 201 
     return 
    else 
     warden.custom_failure! 
     render json: @user.errors, status: 422 
    end 
    end 

    def user_params 
    params.require(:'data.json').permit(:email, :name, :phone, :comments, :residency, :qualification, :acknowledgement) if params.present? 
    end 

end 

但是,它根本不工作。我得到一個錯誤未定義的方法'允許'的字符串。所以顯然我沒有正確訪問JSON。是否有可能因爲JSON被轉義而拋出錯誤?

我一直在網上搜索,並在IRC詢問了幾天,但我沒有提前。

我可以通過正確格式的JSON控制器,它工作正常(有更改需要參數)

我很爲難,因爲我需要能夠創建具有JSON數據的新用戶。任何幫助將HUGELY讚賞。我只是不知道什麼方向甚至從這裏走。

回答

2

params.require(:'data.json')返回一個JSON體,它是一個字符串,但是你的控制器不會解釋這個字符串,而是期望一個Hash。

可以使用解析類方法的JSON字符串轉換爲一個哈希對象JSON像這樣:

require 'json' 
JSON::parse(json_string) 
+0

有意義。我會試一試。謝謝 –

相關問題