2014-11-04 1 views
1

기존 질문은 내가 원하는 것을 나에게 길의 90 %를 입수했습니다,하지만 차질이있다. Rails 중첩 연결입니다. 렌더링에 : JSON

은 내가 CheckIns 모델 및 Person 모델을 가지고있다. CheckInsPeople에 속한다. 나는 그것의 관련 Person 둥지에 싶습니다, 각 CheckIn를 들어

data = CheckIn.all 
render json: { data: data } 

: 내 컨트롤러에서

, 나는이 코드를 가지고있다.

data = CheckIn.all 
render json: data.to_json include: :person 

을하지만 원래처럼 to_json가 아닌 문자열 Hash을 생성하기 때문에,이, 래퍼 JSON 객체의 내부에 내 데이터 둥지가 어렵게 : 과거 StackOverflow의 질문에 나는 이렇게 제안한다.

표준 JSON 출력을 따라갈 수 있도록 래퍼 JSON 객체를 원합니다. 여기서는 이 항상 data: 필드에 있고 다른 메타 데이터를 응답에 첨부 할 수 있습니다.

또한 랩퍼 오브젝트를 유지하면서 어떻게, to_json에 대한 include: 플래그의 효과를 얻을 수 있나요? 특히, 이것은 정말로 추악하기 때문에 나에게 유효한 대답은 아닙니다.

data = CheckIn.all 
render json: { data: JSON.parse data.to_json(include: :person) } 

고마워요! Rails에서이를 수행하는 관용적 인 방법이 있기를 바랍니다.

@users = User.all.includes(:checkins) 

하는 쿼리됩니다 :

+0

을 렌더링하는 객체 .to_json과 반대되는 JSON. 이 두 가지 보석 모두 JSON을 형식화하는 훨씬 더 명백한 DSL을 제공합니다. –

+0

jbuilder는 친구입니다 ... –

+1

예, 이미 JBuilder에 대해 알고 있었지만, 저는 to_json없이이 작업을 수행 할 수 있는지 궁금합니다. 그리고 b) 내 프로젝트에 뷰를 도입하지 않아도됩니다. 그것이 가능하지 않다면, 괜찮습니다. 그러나 내 반응 생성을 그렇게 명백하게하는 것이 좋았습니다. –

답변

3

활동 기록 열망로드에게 사용자와 관련된 http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations

로드 체크 인 지원

User Load (0.2ms) SELECT "users".* FROM "users" 
Checkin Load (0.1ms) SELECT "checkins".* FROM "checkins" WHERE "checkins"."user_id" IN (1) 

을하지만,이 습관은 당신이 당신의 중첩 된 개체를 렌더링 할 수 무엇을 찾고있는 당신의 데이터를 장식하는 무언가이다

당신은 템플릿 장식을 제공 할 수있을 것입니다 https://github.com/nesquena/rabl 또는 github.com/rails/jbuilder

를 살펴보고 데이터는 내가보기 엔 당신의 형식을 제이빌더 또는 RABL의 사용을 건의 할 것

+1

이 시나리오에서 템플릿 사용을 피할 수 있는지 알고 싶었지만 그렇지 않았습니다. 아 아, 고마워! –