2013-03-28 11 views
6

powiedzmy mam klasy osoba i klasę GangJak mogę delegować do metody to_builder modelu z widoku JBuilder?

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 

Jak używać tej metody to_builder z widoku?

Na przykład

#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 

Pamiętaj, że nie zawsze po prostu chcesz użyć domyślnego Person.as_json, ponieważ nie chcę, aby uczynić atrybut secret na osobę.

Większość rzeczy, które wypróbowałem, okazało się odpowiednikiem Person.as_json, a nie Person.to_builder.

Odpowiedz

6

Można użyć Jbuilder#attributes!. Mam na myśli

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

Co powiesz na pojedynczy obiekt na najwyższym poziomie? Jak w akcji gang_member # show.json? –

2

Użyj Jbuilder#merge!, aby scalić atrybuty z budowniczego osoby.

json.gang do 
    json.name @gang.name 
    json.gang_members(@gang.people) do |person| 
    json.merge! person.to_builder.attributes! 
    end 
end 
Powiązane problemy