2012-03-28 51 views
0

我正在爲我的項目設計一個新的API,並且我想要將具有嵌套子項的對象作爲json返回。爲此我決定使用RABL。任意在rabl中嵌套一些屬性

我想在客戶端,以便能夠了解對象是否是有效的,如果沒有這些字段,以正確的儲存失蹤。

我想到的設計應該在可選散列下包含一些可選的字段,其餘部分是必需的。必填字段應該顯示在json的根目錄下。 所以我儘量描述輸出應該是這個樣子:

{ 
    "name": "John", 
    "last_name": "Doe", 
    "optional": { 
     "address": "Beverly Hills 90210", 
     "phones":[{"number":"123456","name":"work"}, {"number":"654321","name":"mobile"}] 
    } 
} 

以上輸出例子描述了所需的字段名和姓,而不是必需的地址和電話(這是在一個belongs_to的-的has_many關聯與對象的關係)。姓名,姓氏和地址是用戶的數據庫字段。

玩RABL我沒有管理到目前爲止創造這種結構。

有什麼建議嗎?我正在尋找一種乾式方式來實現我的所有模型。

回答

1

Rabl的是在動態創建JSON結構真的很不錯,所以我不明白爲什麼你不能達到你的目標。您是否嘗試過在模式中是否將字段設置爲無效,從而將其顯示爲可選項?對我來說這似乎是一個好方法。對於嵌套的孩子,只要做同樣的事情,但擴展孩子的模板。

例如,在您的father/show.rabl中顯示一個自定義節點:optional,其中所有屬性都可以爲null。

然後,用相同的邏輯創建一個child/show.rabl。最後,回到father/show.rabl並添加一個子節點,擴展child/show.rabl模板。這樣你可以實現無限級的「可選項」。

希望它對你有所幫助。

0

在這種情況下,我會使用自由格式選項。

https://github.com/nesquena/rabl

也可以有奇數的情況下響應 的根級不直接映射到任何對象。

在這些情況下,對象可以被分配到「假」 和節點可以構造自由形式。

object false 
node(:some_count) { |m| @user.posts.count } 
child(@user) { attribute :name }