2014-01-27 1 views
3

POST를 통해 다른 웹 사이트에서 보낸 매개 변수를 처리하도록 컨트롤러를 구성하려고합니다. 내 기록에 따르면 다음과 같은 매개 변수가 표시됩니다.레일스 컨트롤러에서 POST에서 중첩 된 JSON 데이터를 추출 할 수 없습니다.

{ "page_id"=> "8b62f4ac-8588-11e3-a094-12314000b04c", "page_name"=> "테스트 양식", "변형"=> "b", "page_url"=> "http://get.xxxxxxx.com/test-form", "data.json"=> "{\"이름 \ ": [Dave \"], \ "이메일 \": [\ "[email protected] \ "4447177265 \"], \ "ip_address \": [\ "64.114.175.126 \"], \ "time_submitted \": [\ "07:34 오전 UTC \"] ]} ","data.xml "=>"\ n \ n Dave \ n [email protected] \ n 2507177265 \ n 64.114.175.126 \ n 07:34 UTC \ n "}

처음에는 Rails가 params에서 JSON을 자동으로 구문 분석하므로 정상적인 방법으로 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 데이터와 새 사용자를 만들 수 있어야하기 때문에 내가 난처한 상황에 빠진거야

합니다 (필요 인수에 대한 변경과) 잘 작동합니다. 어떤 도움이라도 대단히 감사 할 것입니다. 나는 여기서 어떤 방향으로 나아갈 지조차 모른다.

답변

2

params.require (: 'data.json')는 문자열 인 JSON 본문을 반환하지만 컨트롤러가 문자열을 해석하지는 않지만 해시를 예상합니다.

은 당신과 같이 JSON의 구문 분석 클래스 메소드를 사용하여 해시 객체에 JSON 문자열을 변환 할 수 있습니다

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

만들기 감각을. 나는 그것을 시도 할 것이다. 감사 –

관련 문제