2011-12-27 38 views
0

我试图创建一个从各种数据库表中的数据有一个嵌套的JSON和使用 format.json归还{渲染JSON:@Model}Rails中创建嵌套的JSON控制器

例如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

一个非常新的奇特的方式是使用代表模式和ROAR宝石。

我最近一直在使用它,并喜欢它。这两个职位描述它比我更会:

http://nicksda.apotomo.de/2011/12/ruby-on-rest-introducing-the-representer-pattern/

http://nicksda.apotomo.de/2011/12/ruby-on-rest-2-representers-and-the-dci-pattern/

可以定义申述模块,允许用于编码或解码JSON。 将它们包含在模型中,或者在运行时扩展它们,并且对json编码逻辑有很多控制权。

这些表示器可以包含特定的属性/方法,关联的对象以及关联对象的集合,并允许您指定如何处理这些嵌套元素(即编码/解码时使用的表示器和类)。

这里是我的拼图功能为这块类的3层(片 - > AudioVersion - >的AudioFile)工作的API:

https://github.com/PRX/prx_client

+0

谢谢。这种做法使我想要做的事变得复杂,不过谢谢。 – 2012-01-11 07:29:13

0

一个非常简单的方法,这将是只:将相关记录与这些控制器请求中返回的对象包含在一起。我在一个使用它自己的命名空间路由的API中使用它,这个API带有一个单独的控制器,它只返回JSON,因此保持干净和简单。下面是一个表演动作与他们的地址作为JSON返回接触一个简单的例子:

module Api 
    class ContactsController < ApplicationController 
     respond_to :json 

     ... 

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

     ... 

    end 
end 

我认为:include => related_model会在任何控制器设置工作

/app/controllers/api/contacts_controller.rb你也使用。这将返回与属于该联系人的嵌套地址阵列的联系人。当然,它也适用于索引操作。不用说,你需要先在你的模型中建立一个关系,例如, has_many:地址在/models/contact.rb