2011-08-05 2 views
2

json을 생성하는 respond_with 안에 : include => : children을 줄이는 방법을 찾고 있습니다.respond_with (: include => xxx) 단축하기

다음은 예제입니다. 가능한지 확실하지 않지만 알고 싶습니다. 컨트롤러에서

: 나는 인스턴스를 정의 할 때

@p = Parent.where('id = ?', params[:id]) 
respond_with(@p, :include => {:child1 => {}, :child2 => {}, :child3 => {:include => :grandchild1}}) 

이 모든을 포함하도록 어떻게든지이 있습니까? 같은

은 아마 뭔가 : 기본적으로

@p = Parent.includes(:child1, :child2, :child3, :grandchild1).where('id = ?', params[:id]) 
respond_with(@p) 

, 내 코드를 건조하기 위해 노력하고있어 ... 나는이 반복 해시를 포함 입력 유지하고 싶지 않아 ... 거기 하나의 호출에 모든 자식 개체를 포함하는 것일까 요?

+0

자식 1, 자식 2과 :

당신이 컨트롤러 조금 정리하도록해야
class Parent < ActiveRecord::Base # We went to display grandchildren by default in the output JSON def as_json(options={}) super(options.merge(:include => {:child1 => {}, :child2 => {}, :child3 => {:include => :grandchild1}}) end end 

, 당신 만이 필요 :이 같은 뭔가를 기본적으로 관련된 어린이를 포함하려면이 방법을 ovveride 수 있습니다 child3는 Parent의 연관성입니까? 그리고 손자 1은 아이 3의 협회입니까? – Thilo

+0

예 Thilo, 맞을 것입니다. 아이들과 손자는 모델에 따라 다를 것이므로 헬퍼 메소드처럼 사용할 수있는 무언가를 찾고있었습니다 ...하지만 내 머리를 감싸는 데 힘든 시간을 보내고 있습니다. – ThaDick

답변

5

ActiveRecord에는 개체를 json으로 출력하는 방법을 정의하는 as_json 메서드가 있습니다.

@parent = Parent.find(params[:id]) 
respond_with @parent 
+0

안녕하세요 마리오, 나는 as_json 메서드를 재정의하면 여기서 작동하는지 확신하지 못합니다. 내가 사용할 협회가 여러 개있을 수 있습니다. 그래서, 옵션을 통해 여러 어린이와 손자녀에 들어갈 수 없다면, 이것이 작동 할 지 확신 할 수 없지만, 원래 코드를 사용하는 것과 같을 것입니다. 틀렸습니까? – ThaDick

+0

다른 옵션을 사용하려는 경우 위의 원래 코드와 같은 문을 사용하여 응답에 추가해야합니다. –

+0

당신은 의도 된 효과를 얻기 위해'options.reverse_merge'를 원할 것입니다. – sbeam

관련 문제