2012-03-12 56 views
23

我想使用RABL呈現一個非常簡單的數據結構,但我無法弄清楚如何正確地刪除子根節點。這是我的兩個模板。刪除RABL中的子根節點

首先,收集索引模板。

collection @groups, :object_root => false 

attributes :id, :name 
child :files do 
    extends 'groups/_file' 
end 

接下來,文件部分模板。

object @file 

attributes :id 

這兩個模板,最終產生以下JSON:

[ 
    { 
     "id":"4f57bf67f85544e620000001", 
     "name":"Some Group", 
     "files":[ 
     { 
      "file":{ 
       "id":"4f5aa3fef855441009000007" 
      } 
     } 
     ] 
    } 
] 

我想找到一種方法來刪除文件集合內的根「文件」鍵。類似:

[ 
    { 
     "id":"4f57bf67f85544e620000001", 
     "name":"Some Group", 
     "files":[ 
     { 
      "id":"4f5aa3fef855441009000007" 
     } 
     ] 
    } 
] 

回答

47

在Rabl的最新版本,你有,如果你想include_root_json是在各級false來設置此配置。

Rabl.configure do |config| 
    config.include_json_root = false 
    config.include_child_root = false 
end 
+0

我也有這個相同的問題,我已經嘗試了每個維基解決方案,並重新啓動我的服務器少數幾次,都沒有用。 – ohayon 2013-01-27 18:04:02

+0

對於我來說不適用於rabl 0.9.x。 – Machisuji 2013-12-09 13:20:14

2

這是去除根JSON的通常方式(而不是指定object_root:假)

配置/初始化/ rabl_config.rb

Rabl.configure do |config| 
    config.include_json_root = false 
end 

是否移動,要那裏(並重新啓動rails),修復它?

+3

嗯,我不是真的想在全球範圍內進行調整。我想默認包含根節點。 – BBonifield 2012-03-13 04:18:52

+1

喜歡這個。我寧願告訴它/包含/對象根目錄,而不是排除它。 – RyanScottLewis 2012-04-15 06:06:56

+0

@ c00lryguy如果你做了'include_json_root = false',你如何告訴它在個案基礎上包含根? – 2012-06-15 06:06:52

12

嘗試更換:

child :files do 
     extends 'groups/_file' 
    end 

有:

node :files do |group| 
     group.files.map do |file| 
     partial 'groups/_file', object: file, root: false 
     end 
    end 
+2

這很完美。謝謝! – BBonifield 2012-03-14 16:08:12

+0

上面的一個更完美:P – nXqd 2013-03-01 15:18:50

0

只是把它擺在那裏,如果你想要應用特定子:

child :files, :object_root => false do 
    extends 'groups/_file' 
end