2011-12-27 36 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