2013-08-16 10 views
6

Ich muss folgenden rabalkode, um einige JSON Daten zu erzeugen.falscher Kindwurzelname in rabl und kann Kindwurzelnamen nicht einstellen

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 

Und die Daten, die er sehen wie folgt erzeugt:

[ 
    { 
     "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": [] 
     } 
    } 
] 

Sie die event Hash ignorieren können, die seltsamen Dinge in den 2 users Array am Boden geschehen.

So wie Sie sehen können, das Kind rsvp_users Array zeigt mit dem Namen bis users auch wenn ich die root param auf "rsvp_users" gesetzt. Jedoch für checkedin_users Array (die im Moment leer ist), muss ich nichts tun, und es ist der Name ist automatisch checkedin_users. Was passiert hier? Ist es ein Fehler im Rabl? Oder ist es etwas, was ich vermisse?

+2

Haben Sie versucht "Kind: rsvp_users =>: rsvp_users,: object_root => false"? – Bigxiang

+0

Ja habe ich, und das gibt mir tatsächlich einen Fehler. Aber wenn ich ': rsvp_users =>: rsvp_users' alleine ohne das': object_root => false' mache, wäre das in Ordnung. Aber ich möchte nicht, dass jedes Objekt im Array einen Namen hat. – Enzo

+1

versuchen Sie dieses "Kind {: rsvp_users =>: rsvp_users}, {: object_root => false}", es funktioniert auf meinem Rechner. – Bigxiang

Antwort

7

Ich habe den gleichen genauen Fehler gefunden, scheint das Problem das Objektstammverzeichnis auf false setzen. den Kommentar von Bigxiang Nach mir ein wenig experimentiert habe festgestellt, dass diese phantastisch funktionieren:

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

Hinweis sowohl über die runden Klammern „()“ und Klammern „{}“.