2013-08-16 26 views
6

Tôi phải tuân theo mã rabl để tạo ra một số dữ liệu JSON.sai tên gốc con trong rabl và không thể đặt tên gốc con

object @event 
attributes :id, :EID, :name, :address, :description, :latitude, :longitude, :time, :created_at 
node(:rsvp_count) { |event| event.rsvp_users.count } 
node(:check_in_count) { |event| event.checkedin_users.count } 
node(:FID) { |event| event.creater.FID if event.creater} 

child :rsvp_users, :object_root => false do 
    extends 'users/index' 
end 

child :checkedin_users, :object_root => false do 
    extends 'users/index' 
end 

Và dữ liệu mà nó tạo ra trông như thế này:

[ 
    { 
     "event": { 
      "id": 2, 
      "EID": 123458, 
      "name": "event no.2", 
      "address": "189 elm st", 
      "description": "awesome event", 
      "latitude": 10, 
      "longitude": 10, 
      "time": "2013-10-20T18:00:00Z", 
      "created_at": "2013-08-15T21:06:21Z", 
      "rsvp_count": 3, 
      "check_in_count": 0, 
      "FID": 12345678, 
      "users": [ 
       { 
        "id": 4, 
        "FID": 112233445, 
        "name": "name1", 
        "using_app": true 
       }, 
       { 
        "id": 3, 
        "FID": 9999, 
        "name": "name2", 
        "using_app": false 
       }, 
       { 
        "id": 2, 
        "FID": 123456789, 
        "name": "name3-robot", 
        "using_app": true 
       } 
      ], 
      "checkedin_users": [] 
     } 
    } 
] 

Bạn có thể bỏ qua các event băm, những thứ kỳ lạ đang xảy ra ở phía dưới trong mảng 2 users.

Như bạn có thể thấy, mẫu con rsvp_users hiển thị với tên users ngay cả khi tôi đặt thông số root thành "rsvp_users". Tuy nhiên, đối với mảng checkedin_users (hiện đang trống), tôi không cần phải làm gì cả và tên của nó là tự động checkedin_users. Chuyện gì đang xảy ra ở đây? Nó là một lỗi trong rabl? Hay là cái gì đó mà tôi đang thiếu?

+2

Bạn đã thử "con: rsvp_users =>: rsvp_users,: object_root => false" chưa? – Bigxiang

+0

Vâng tôi có, và điều này trong thực tế mang lại cho tôi một lỗi. Nhưng nếu tôi làm ': rsvp_users =>: rsvp_users' một mình mà không có': object_root => false', nó sẽ ổn thôi. Nhưng tôi không muốn mỗi đối tượng trong mảng có một tên. – Enzo

+1

thử "con {: rsvp_users =>: rsvp_users} này, {: object_root => false}", nó hoạt động trên máy của tôi. – Bigxiang

Trả lời

7

Tôi đã gặp phải lỗi chính xác tương tự, sự cố dường như đang đặt object_root thành false. Sau khi bình luận của Bigxiang tôi đã thử nghiệm một chút và thấy rằng điều này làm việc fantastically:

child({:rsvp => :rsvp}, {:object_root => false}) do 
    extends "users/index" 
end 

Lưu ý cả hai dấu ngoặc tròn "()" và niềng răng "{}".

Các vấn đề liên quan