2013-08-16 5 views
6

JSONデータを生成するためにrablコードに従わなければなりません。rablの子ルート名が間違っていて、子ルート名を設定できません

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 

は、そして、それが生成するデータは、次のようになります。あなたはeventハッシュを無視することができます

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

、奇妙なものが2 users配列内の下部に起こっています。

rootパラメータを"rsvp_users"に設定しても、子rsvp_usersの配列はusersという名前で表示されます。しかし、checkedin_users配列(これは現在空です)では何もする必要はなく、名前は自動的にcheckedin_usersです。ここで何が起きてるの?それはrablのバグですか?それとも、私が行方不明のものですか?

+2

"子:rsvp_users =>:rsvp_users、:object_root => false"を試しましたか? – Bigxiang

+0

はい、私はこれが実際に私にエラーを与えます。しかし、 ':rsvp_users =>:rsvp_users'だけを':object_root => false'なしで行うと、うまくいくでしょう。しかし、配列内の各オブジェクトに名前を付けることは望ましくありません。 – Enzo

+1

この「子{:rsvp_users =>:rsvp_users}、{:object_root => false}」を試してみてください。 – Bigxiang

答えて

7

同じ正確なバグが発生しました。問題は、object_rootをfalseに設定しているようです。 Iビットを実験し、この幻想機能することを見出したBigxiangのコメントの後:

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

注両方丸括弧「()」と括弧「{}」。

関連する問題