2013-03-28 1 views
6

이의 내가 Person 클래스와 갱 클래스 내가보기에서이 to_builder 방법을 어떻게 사용합니까JBuilder 뷰에서 모델의 to_builder 메소드를 위임하려면 어떻게합니까?

class Person 
    belongs_to :gang 
    attr_accessible :name, :secret 

    def to_builder 
    Jbuilder.new do |app| 
     person.id id 
     person.name name 
    end 
    end 
end 

class Gang 
    has_many :people 
    attr_accessible :name 
end 

있다고 가정 해 봅시다? 예를

#app/views/gang/show.json.jbuilder (@gang set by the controller) 

json.gang do |json| 
    json.name @gang.name 
    json.gang_members(@gang.people) do |person| 
    #how do I delegate to the person.to_builder here? 
    end 
end 

당신이, 내가 그냥 사람에 secret 속성을 렌더링 싶지 않기 때문에, 기본 Person.as_json을 사용하지 않으려는 마음이 들어

.

내가 시도한 대부분의 작업이 Person.to_builder가 아닌 Person.as_json과 동일하게 렌더링되었습니다.

답변

6

Jbuilder#attributes!을 사용할 수 있습니다. 내 말은

json.gang do |json| 
    json.name @gang.name 
    json.gang_members @gang.people.map { |person| person.to_builder.attributes! } 
end 
+5

최상위 수준의 단일 개체는 어떻습니까? gang_member # show.json 작업에서와 같이? –

2

사람 작성기의 속성을 병합하려면을 사용하십시오.

json.gang do 
    json.name @gang.name 
    json.gang_members(@gang.people) do |person| 
    json.merge! person.to_builder.attributes! 
    end 
end 
관련 문제