7

Person クラスと Gang クラスがあるとします。

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

ビューからこの to_builder メソッドを使用するにはどうすればよいですか?

例えば

#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

secretPerson の属性をレンダリングしたくないので、デフォルトの Person.as_json を使用したいだけではありません。

私が試したことのほとんどは、Person.to_builder ではなく、Person.as_json に相当するものをレンダリングすることになりました。

4

2 に答える 2

6

使用できますJbuilder#attributes!。つまり

json.gang do |json|
  json.name @gang.name
  json.gang_members @gang.people.map { |person| person.to_builder.attributes! }
end
于 2013-04-11T02:31:20.423 に答える
2

Jbuilder#merge!人物ビルダーから属性をマージするために使用します。

json.gang do
  json.name @gang.name
  json.gang_members(@gang.people) do |person| 
    json.merge! person.to_builder.attributes!
  end
end
于 2014-12-06T18:40:33.553 に答える