2013-08-23 2 views
0

내 응용 프로그램에서 형식 아래에서 JSON을 얻고에게 전화구문 분석 ROR에서 JSON과 2 컨트롤러

{"list":[{"orderno":"02201308231133","itemno":"w01","name":"t01","amount":"120","status":"done"},{"orderno":"02201308231133","itemno":"w02","name":"t02","amount":"120","status":"done"},{"orderno":"02201308231133","itemno":"w03","name":"t03,"amount":"120","status":"done""}]} 

지금은 JSON 위에서이 작업을 수행해야합니다 그대로 첫 번째 목록 테이블에서 위의 행을 추가 , 두 번째 : 위의 경우 orderno ie02에서 처음 두 자리를 추출하고 값 추출 (02)의 상태 (완료)로 다른 테이블을 업데이트 (또는 다른 컨트롤러 호출)합니다.

첫 번째 작업을 수행 할 수 있습니다. 동일한 컨트롤러 코드는 다음과 같습니다.

def create 
    lists = params[:list].collect{|list_attributes| List.new(list_attributes)} 
    valid,not_valid = lists.partition{|list| list.valid?} 

    if not_valid.blank? 
     lists.map(&:save) 
     @lists = lists 
     format.html { redirect_to @list, notice: 'List was successfully created.' } 
     format.json { render json: @list, status: :created, location: @list } 
    else 
     format.html { render action: "new" } 
     format.json { render json: @list.errors, status: :unprocessable_entity } 
    end 
    end 

위의 메소드는 DB 테이블에 행을 삽입합니다. 목록 컨트롤러에서 create 메소드를 호출하기 전에 JSON을 구문 분석하여 값을 추출하는 방법을 파악할 수 없습니다. 일단 값이 있으면 두 테이블을 모두 업데이트해야합니다. 제발 조언. 감사합니다

답변

0

사용하기 쉬운 방법이있는 보석 'json' (설명서는 https://github.com/flori/json)을 설치할 수 있습니다. 당신에게 문자열과 해시의 배열을 줄 것이다

JSON.parse(string) 

:

그럼 당신은 귀하의 JSON을 읽을 수 있습니다.

order_no[0,2].to_i 
+0

을이 라이브러리는 실제보다 더 빨리이다 : 당신은 다음 첫 번째 두 자리 숫자를 가지고 사용하여 정수로 변환, 같은 배열을 통해 반복 :order 키에 해당하는 값을 얻어서 주문 번호의 처음 두 자리를 얻을 수 있습니다 json gem과 comatibility api가 있습니다. https://github.com/brianmario/yajl-ruby –

+0

입력 해 주셔서 감사합니다. 또 다른 문제는 추출 된 값으로 다른 컨트롤러로 이동하는 방법입니다. – Gaurav

+0

해당 목록과 관련된 모델이 있습니까? 그렇다면 일단 데이터를 db에 저장하면 원하는 모든 컨트롤러에서 액세스 할 수 있습니다. 그렇지 않다면 왜 안 되겠습니까? – Miotsu