![](/img/trans.png)
[英]Using ActiveModel::Serializer in Rails - JSON data differs between json and index response
[英]Rails ActiveModel::Serializer nest response in “data”: parent
我有一個Rails應用程序,其中使用了gem active_model_serializers
。 在我的答復中,我想將結果嵌套在"data":
父級。 目前,當我沒有任何響應數據時,會得到以下JSON:
[]
我想要的是這樣的:
{
"data": []
}
我還想在有數據的情況下使用相同的格式,如下所示:
{
"data": [
{
"id": 135,
[...]
我已經設法通過使用render json
獲得想要的結構,如下所示:
render json: { data: respond_values}
但是在這種情況下,我的序列化程序將被忽略,並且模型中的所有屬性都將返回。 我的序列化器如下所示:
class TranslationSerializer < ActiveModel::Serializer
attributes :id, :value, :created_at, :updated_at, :language_id
has_one :language
has_one :localized_string, serializer: LocalizedStringParentSerializer
end
如果我改為在我的序列化程序工作時使用respond_with
但我沒有得到想要的結構-數據父/容器丟失。
我需要什么來使序列化程序正常工作?
首先,除非您需要支持舊版API,否則請使用JSON:API適配器:
默認情況下,ActiveModelSerializers將使用屬性適配器(無JSON根)。 但是我們強烈建議您使用JsonApi適配器,該適配器遵循jsonapi.org/format中指定的1.0格式。
盡管沒有人完全同意JSON:API中的所有設計決策,但它得到了Ember和Angular等前端框架的廣泛支持,並且有可能進一步受到關注。
否則,您將需要創建自己的適配器,因為JSON適配器不允許您設置根密鑰。
# lib/active_model_serializers/adapters/bikeshed_adapter.rb
module ActiveModelSerializers
module Adapters
class BikeshedAdapter < Json
def root
:data
end
end
end
end
ActiveModelSerializers.config.adapter = :bikeshed
出於任何原因,Rails都找不到與模型匹配的序列化器。 使用序列化程序的模型的約定名稱/命名空間中可能缺少某些內容。
https://github.com/rails-api/active_model_serializers/blob/master/docs/general/rendering.md
但是,如果您明確聲明了序列化程序,則它應該可以工作。
render json: @post, serializer: PostPreviewSerializer
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.