如何从JBuilder视图委托模型的to_builder方法?

假设我有一个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 

请注意,我不想只使用默认的Person.as_json,因为我不想在Person上呈现secret属性。

我尝试过的大部分内容最终都是渲染了Person.as_json,而不是Person.to_builder。

你可以使用Jbuilder#attributes! 。 我的意思是

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

使用Jbuilder#merge! 合并人员构建器的属性。

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