假设我有一个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。
答案 0 :(得分:6)
您可以使用Jbuilder#attributes!
。我的意思是
json.gang do |json|
json.name @gang.name
json.gang_members @gang.people.map { |person| person.to_builder.attributes! }
end
答案 1 :(得分: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