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

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

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

我尝试过的大多数方法最终都会呈现与Person.as_json相当的内容,而不是Person.to_builder。

2个回答

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 操作中? - Blake Miller

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接