2012-03-12 44 views
23

Tôi đang cố gắng kết xuất một cấu trúc dữ liệu đơn giản bằng RABL, nhưng tôi không thể tìm ra cách xóa các nút gốc con đúng cách. Đây là hai mẫu của tôi.Xóa các nút gốc con trong RABL

Đầu tiên, mẫu chỉ mục thu thập.

collection @groups, :object_root => false 

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

Và tiếp theo, phần mẫu tệp.

object @file 

attributes :id 

Hai mẫu kết thúc sản xuất các JSON sau:

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

Tôi muốn tìm một cách để loại bỏ các gốc "file" chìa khóa bên trong của bộ sưu tập các file. Một cái gì đó như:

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

Trả lời

47

Trong các phiên bản mới nhất của Rabl, bạn phải thiết lập cấu hình này nếu bạn muốn include_root_jsonfalse ở tất cả các cấp.

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

ive đã có vấn đề tương tự này cũng có, và tôi đã thử giải pháp này cho mỗi wiki và khởi động lại máy chủ của tôi một số ít lần, tất cả để avail không có. – ohayon

+0

Không hoạt động đối với tôi hoặc là của rabl 0.9.x. – Machisuji

2

Đây là cách thông thường loại bỏ các json gốc (chứ không phải là quy định cụ thể object_root: false)

config/initializers/rabl_config.rb

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

Liệu di chuyển đến có (và khởi động lại đường ray), sửa chữa nó?

+3

Vâng, tôi không thực sự cố gắng để điều chỉnh nó trên toàn cầu. Tôi muốn mặc định bao gồm các nút gốc. – BBonifield

+1

Yêu thích điều này. Tôi thà nói nó với/include/root của đối tượng hơn là loại trừ nó. – RyanScottLewis

+0

@ c00lryguy nếu bạn làm 'include_json_root = false', làm thế nào để bạn nói nó bao gồm gốc trên cơ sở từng trường hợp? –

12

Hãy thử thay thế:

child :files do 
     extends 'groups/_file' 
    end 

với:

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

Điều đó thật hoàn hảo. Cảm ơn! – BBonifield

+0

một ở trên là hoàn hảo hơn: P – nXqd

0

chỉ đưa nó ra khỏi đó, trong trường hợp bạn muốn áp dụng nó cho một đứa trẻ cụ thể:

child :files, :object_root => false do 
    extends 'groups/_file' 
end 
Các vấn đề liên quan