簡體   English   中英

“數據”中的Rails ActiveModel :: Serializer嵌套響應:父級

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM