使用JBuilder嵌套JSON

时间:2014-04-22 14:46:37

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

我想使用JBuilder构建一个JSON结构:

{
"name": "John Doe", 
"reservations": [
    {
        "restaurant": "ABC",
        "reservation_time": "2012/12/01 20:00",
        "name": "John Doe"
    }, 
    {
        "restaurant": "CDE",
        "reservation_time": "2012/12/04 20:00",
        "name": "John Doe"
    }
]
}

{
"name": "Jane Doe", 
"reservations": [
    {
        "restaurant": "Little Bites",
        "reservation_time": "2012/12/01 20:00",
        "name": "Jane Doe"
    }, 
    {
        "restaurant": "Thai Taste",
        "reservation_time": "2012/12/04 20:00",
        "name": "Jane Doe"
    }
]
}

我尝试了ESoft的解决方案here,但我无法让它发挥作用。在他的解决方案中,似乎“name”属性是硬编码的?

我需要做什么才能让JBuilder从我的数据中生成name属性的值(我的数据从我的Rails控制器传递到我的.json.jbuilder文件作为数组)? (即如果John Doe在我的数据库中有五个预订,而Jack Daniels有3个预订,那么我希望我的名字属性为“John Doe”和“Jack Daniels”。

1 个答案:

答案 0 :(得分:3)

您可以使用block json.some_var_name方法获取命名数组(或任何其他结果)。

假设您有一个user,其属性为name(字符串)和reservations(引用的模型数组)。您的示例的完整jbuilder模板可以是:

json.array!(@users) do |user|
    json.name user.name

    json.reservations do
        json.array!(user.reservations) do |reservation|
            json.restaurant reservation.restaurant.name
            json.reservation_time reservation.time
            json.name user.name
        end
    end
end