在Rails控制器中创建嵌套JSON

时间:2011-12-27 07:04:28

标签: ruby-on-rails ruby-on-rails-3 json api

我正在尝试创建一个嵌套的JSON,它包含来自各种db表的数据并使用它返回 format.json {render json:@Model}

例如像这样的json结构:

{"Model1": [
        {"id": 3, "name": "newURI", {"Model2": ["id": 4, "name":"vill"]}},
        {"id": 1, "name": "bill", {"Model2": ["id": 1, "name":"lily"]}},
        {"id": 2, "name": "ton", {"Model2": ["id": 2, "name":"bow"]}},
    ]}

我已经四处寻找,但并不太成功。我看到Rabl,但生成的嵌套JSON没有很好地形成。如果可以,请你帮助我。感谢

1 个答案:

答案 0 :(得分:0)

一种非常简单的方法是:将相关记录包含在那些控制器请求中返回的对象中。我在一个API中使用它,它存在于它自己的命名空间路由中,它带有一个单独的控制器,只返回JSON,从而保持简洁。这是一个show动作的简单示例,它将联系人的地址返回为JSON:

<强> /app/controllers/api/contacts_controller.rb

module Api
    class ContactsController < ApplicationController
        respond_to :json

        ...

        def show
            respond_with Contact.find(params[:id]), :include => :addresses
        end

        ...

     end
end

我认为:include => related_model可以在您使用的任何控制器设置中工作。这将返回与属于此联系人的嵌套地址数组的联系人。当然它也适用于索引操作。

毋庸置疑,您需要先在模型中设置关系,例如has_many:/models/contact.rb中的地址