2013-07-12 3 views
0

부모와 자식 관계에서 json 객체를 빌드하는 중이다. 나는 많은 아이들과 부모 모델이 있습니다. Ruby 2.0의 특정 키와 값을 사용하여 JSON 객체를 배열로 배열

는 그래서 같은 JSON 객체를 만들려고 해요 :
{ parent_1.name: { parent_1.child.age, parent_1.child.height}, parent_1.name: { child_2.age, child_2.height}, parent_2.name: ...... } 

This SO question

은 많은 도움이되었습니다 그러나 나는 완전히 그것을 알아낼 수 없습니다.

나는이 시도했다 :

정말 가까이 (하지만 찾고 무서운)입니다
Parent.all.inject({}) { |hsh, p| hsh[p.name] = { p.name => p.children.inject({}) { |h,v| h[v] = {age: v.age, height: v.height}} }} 

. 그러나 나는 오직 한 부모의 자녀를 얻는다 - 나는 모든 부모님이 자녀와 함께 필요하다. 나는 단지 아이들의 키와 나이가 필요하다. 출력은 (내가 JSON으로 변환을 제외한)이 같았다 :

{"BarryWhite"=>{:age=>"12", :height=>"45cm"}} 

그것은 다음과 비슷한 모습이 될 것입니다

{"BarryWhite"=>{:age=>"12", :height=>"45cm"}, {:age => "34", :height => "108cm"}, "AndyMurray"=>{:age=>"14", :height=>"125cm"}}  

가 어떻게 출력에 올바른 형식 JSON을이를 얻을 수 있습니다.

답변

0

우선 JSON 형식은 약간 잘못되었습니다. 당신이 해시를 필요로하지 않는 한 당신은, 내부 #inject 필요하지 않습니다이 들어

{ 
    'BarryWhite' => [ 
    { :age => '12', :height => '45cm' }, 
    { :age => '34', :height => '108cm' } 
    ] 
    'AndyMurray' => [ 
    { :age => '14', :height => '125cm' } 
    ] 
} 

하지만 배열 :

나는 아이들이 같은 해시의 배열해야 가정합니다.

또한 #inject 비트를 잘못 사용하고 있습니다. #inject는 루프를 마지막으로 실행 한 명령문을 전달하여 해시를 작성합니다. 마지막으로 실행 된 명령문은 변수 "p"의 현재 값만 리턴하는 지정입니다. 항상 "hsh"전체를 반환해야합니다.

1) 각 모델 렌더링 할 때, JSON 렌더링 to_json 방법

2)가 : @items을 여기에 내가 그것을 할 방법

Parent.all.inject({}) do |hsh, p| 
    hsh[p.name] = p.children.map { |c| {age: c.age, height: c.height} } 
    hsh 
end 
+0

서식에 대한 좋은 점. 그걸 잊어 버렸어 .. 고마워, 모두 정렬. 에스 – simonmorley

0

: 여기

는 작업 솔루션입니다. (& : to_json)

array.to_json이 호출 될 때 왜 자식 개체에서 자동으로 to_json을 호출하지 않는지 잘 모르겠습니다.

관련 문제