2014-01-06 41 views
6

一个嵌套的JSON数组我有这样的车型在上轨产生的JBuilder

分公司模型红宝石:的has_many:菜单

class Branch < ActiveRecord::Base   
    belongs_to :place 
    belongs_to :city 
    has_many :menus , dependent: :destroy 
    belongs_to :type_place 
end 

菜单模式:的has_many:产品

class Menu < ActiveRecord::Base 
    attr_accessible :description, :product_name, :price, :category_id, :menu_id 
    belongs_to :branch 
    has_many :products, dependent: :destroy 
end 

产品型号:

class Product < ActiveRecord::Base 
belongs_to :menu 
belongs_to :category 
end 

与视图下面的代码:

if @condition 
    json.code :success 
    json.branch do 
    json.array!(@branches) do |json, branch| 
     json.(branch, :id, :branch_name, :barcode) 
     json.menu branch.menus, :id, :menu_name 
    end 
    end 
else 
    json.code :error 
    json.message 'Mensaje de error' 
end 

得到:

{ 
"code": "success", 
"branch": [ 
{ 
    "id": 1, 
    "branch_name": "Sucursal 1", 
    "barcode": "zPOuByzEFe", 
    "menu": [ 
    { 
     "id": 2, 
     "menu_name": "carta sucursal 1" 
    } 
    ] 
}, 
{ 
    "id": 2, 
    "branch_name": "Sucursal Viña Centro", 
    "barcode": "RlwXjAVtfx", 
    "menu": [ 
    { 
     "id": 1, 
     "menu_name": "carta viña centro" 
    }, 
    { 
     "id": 5, 
     "menu_name": "carta viña centro vinos" 
    } 
    ] 
}, 
{ 
    "id": 3, 
    "branch_name": "dddd", 
    "barcode": "eSbJqLbsyP", 
    "menu": [ 

    ] 
    } 
] 
} 

但我得到了每个菜单的产品?我怀疑我需要遍历菜单,但我已经尝试了几种方法没有成功。

回答

11

我不知道哪个属性你的产品可以有,但我会尝试这样的:

if @condition 
json.code :success 
json.array!(@branches) do |json, branch| 
    json.(branch, :id, :branch_name, :barcode) 
    json.menus branch.menus do |json,menue| 
    json.id menue.id 
    json.menu_name menue.menu_name 
    json.products menue.products do |json, product| 
     json.product_attribute_1 product.product_attribute_1 
    end 
    end 
end 
else 
    json.code :error 
    json.message 'Mensaje de error' 
end 

我也不太清楚为什么你尝试拼图@branches一个分支下,通过陈述:

json.branch do 
    ... 
end 

我刚刚删除了那个。

+0

非常感谢你!工作完美! – FrancoML

+0

嗯,它结束了为我工作,没有传递json作为第一个参数,我也用json。提取!而不是语法:json。(branch,:id,:branch_name,:barcode)。 –

0

这是从文档(“本”是“json.array!方法)http://www.rubydoc.info/github/rails/jbuilder/Jbuilder:array

它通常只需要使用顶级阵列此方法。如果你 命名阵列,你可以这样做:!

json.people(@people) do |person| 
    json.name person.name 
    json.age calculate_age(person.birthday) 
end 

{ "people": [ { "name": David", "age": 32 }, { "name": Jamie", "age": 31 } ] } 

我使用数组有意想不到的行为,并定期重复的建议完美地工作并提出我的C ö非常可读:

json.user do 
    json.email @user.email 
    json.devices @user.devices do |device| 
    json.partial! 'devices/device', device: device 
    end 
end