我在轨道上的红宝石中有这个型号
分支模型:has_many:菜单
class Branch < ActiveRecord::Base
belongs_to :place
belongs_to :city
has_many :menus , dependent: :destroy
belongs_to :type_place
end
菜单型号:has_many:products
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": [
]
}
]
}
但是当我得到每个菜单的产品时,我怀疑我需要迭代菜单,但我尝试了几种方法却没有成功。
答案 0 :(得分:13)
我不确定您的产品可以具有哪些属性,但我会尝试类似:
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
我刚删除了那个。
答案 1 :(得分:0)
这是来自文档(&#34;这&#34;是&#34; 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 } ] }
我有使用数组的意外行为!和建议的常规迭代完美地工作,使我的代码非常易读:
json.user do
json.email @user.email
json.devices @user.devices do |device|
json.partial! 'devices/device', device: device
end
end