2014-01-06 29 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