【发布时间】:2017-07-07 22:29:39
【问题描述】:
我有一个 ruby (2.4.0p0) rails (5.0.2) 控制器,我希望从中返回一个 json 结果,其中包含 Thing 对象列表以及一些高级信息(例如来自 Kaminari 分页的下一个和上一个)。
考虑与所有者关联的事物。事物具有 owner_id 属性。
对于@things = Thing.page(1).per(2) 我将能够使用
渲染 json:@things
得到;
[
{ "id": 1, "owner_id": 1, "name": "thing1" },
{ "id": 2, "owner_id": 1, "name": "thing2" }
]
很好。如果我然后创建一个名为 ThingSerializer.rb 的序列化程序并定义所有者,使其添加 "owner":"CatInHat" 而不是 "owner_id":1 这也有效;
[
{ "id": 1, "owner": "CatInHat", "name": "thing1" },
{ "id": 2, "owner": "CatInHat", "name": "thing2" }
]
这很好,但是,当我想添加更高级别的数据并将列表标记为“结果”时,例如我尝试时,我的问题就出现了;
渲染json:{下一个:“some_url_link”,上一个:“some_other_url_link”,结果:@bags}
我想要;
{ "next":some_url_link,
"prev":some_other_url_link,
"results":[ { "id": 1, "owner": "CatInHat", "name": "thing1" }, { "id": 2, "owner": "CatInHat", "name": "thing2" } ]
}
我得到的几乎是上述内容,但使用 "owner_id":1 而不是 "owner":"CatInHat" - 当我标记和嵌套我的事物列表时,我的序列化程序似乎没有被使用。使用我的序列化程序并获得此输出的适当方法是什么?
如果我创建 config/initializers/active_model_serializers.rb 并添加 ActiveModel::Serializer.config.adapter = :json_api 它为我提供了一个类似的 api,但我不知道是否可以对其进行自定义以符合我上面需要的规范。
感谢您的帮助
【问题讨论】:
标签: ruby-on-rails json