【问题标题】:wrong child root name in rabl and can't set child root namerabl 中的子根名称错误,无法设置子根名称
【发布时间】:2013-08-16 01:26:47
【问题描述】:

我必须按照 rabl 代码生成一些 JSON 数据。

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

您可以忽略 event 哈希,奇怪的事情发生在 2 users 数组的底部。

如您所见,即使我将root 参数设置为"rsvp_users",子rsvp_users 数组也会以名称users 显示。但是,对于checkedin_users 数组(现在是空的),我不需要做任何事情,它的名称自动为checkedin_users。这里发生了什么?它是rabl中的错误吗?还是我错过了什么?

【问题讨论】:

  • 你试过“child :rsvp_users => :rsvp_users, :object_root => false”吗?
  • 是的,我有,这实际上给了我一个错误。但是,如果我在没有:object_root => false 的情况下单独使用:rsvp_users => :rsvp_users,那就没问题了。但我不希望数组中的每个对象都有名字。
  • 试试这个“child {:rsvp_users => :rsvp_users}, {:object_root => false}”,它适用于我的机器。

标签: ruby-on-rails json rabl


【解决方案1】:

我遇到了同样的错误,问题似乎是将 object_root 设置为 false。 根据Bigxiang的评论,我做了一些实验,发现这非常有效:

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

注意圆括号“()”和大括号“{}”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2021-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多