使用jbuilder访问子对象有很多关系

时间:2014-08-22 22:44:25

标签: javascript ruby-on-rails json ruby-on-rails-4 jbuilder

尝试使用带有gon gem的jbuilder将对象及其子对象传递给javascript,其中object为lender且它有许多子节点inventories。遵循gon gem here的指示,但我坚持认为这是jbuilder方面的一个问题,而不是gon ......你会明白为什么。

获取贷方的当前代码:

#/ test.json.builder

json.lenders @lenders, :email, :latitude, :longitude

控制器代码中的测试操作

@lenders = Signups.all
gon.jbuilder

#/ test.html.erb

<script>
  console.log(gon.lenders)
</script>

这样可以正常工作,并产生以下输出:enter image description here

然而,当我尝试使用标准的jbuilder代码按照Ryan Bates的节目notes来获取孩子inventories时,就像这样:

#/ test.json.builder

json.lenders @lenders, :email, :latitude, :longitude
json.inventories @lenders.inventories, :id, :itemlist_id, :description

我收到错误:undefined method库存'##

我明白了我收到错误的原因,因为根据上面的输出,@lenders的结果是lenders的数组,而不是贷方对象本身,但是接下来是怎么回事我得到了清单吗?我希望的目标是输出如上所示,但对于每个对象,有一个inventories字段,它产生一个单独的inventory个对象的数组,每个属性都包含iditemlist_iddescription


我尝试过的事情产生了同样的错误:

一个每个Ryan Bates生孩子的其他变体

json.comments @article.comments do |json, comment|
  json.partial! comment
end

#in partial
  json.(comment, :id, :name, :content)

TWO 包括控制器代码中的库存

控制器代码中的测试操作

@lenders = Signups.all.includes(:inventories)
gon.jbuilder

这不是一个问题,gon是在gemfile中的jbuilder之后安装的,我将它包含在视图标题中。

2 个答案:

答案 0 :(得分:1)

好的,这很有效:

<强>#/ test.json.builder

json.array!(@lenders) do |json, lender|
  json.(lender, :id, :email, :latitude, :longitude)
  json.inventories lender.inventories do |json, inventory|
    json.(inventory, :id, :itemlist_id, :description)
  end
end    

this answer

中提取

答案 1 :(得分:0)

嵌套has many关系的简单方法。

json.array! @votations do |votation|
  json.id votation.id
  json.description votation.description
  json.status votation.status
  json.name votation.name
  json.options do
    json.array! votation.options, :id, :name, :votation_id
  end
end