【问题标题】:Make root node in Active Model Serializer在 Active Model Serializer 中创建根节点
【发布时间】:2013-03-11 23:57:04
【问题描述】:

我的 Rails 应用程序中有一个 JSON 数组,使用 Active Model Serializer:

[
  {
    "contact" : {}
  },
  {
    "contact" : {}
  }
]

我如何做到这一点,以便我像这样使用活动模型序列化程序删除联系人上方的一级节点:

[
 {
 },
 {
 }
]

我还想删除节点名称“联系人”。

【问题讨论】:

    标签: ruby-on-rails activerecord active-model-serializers


    【解决方案1】:

    RailsCast #409 Active Model Serializers 对此进行了介绍。

    为了删除根节点,您在控制器中对render 的调用中添加root: false。假设您在 JSON 中的 contacts 来自 contacts#index 方法,您的代码可能类似于:

    def index
      @contacts = Contacts.all
      respond_to do |format|
        format.html
        format.json { render json: @contacts, root: false }
      end
    end
    

    或者,如果您不想要任何 JSON 中的任何根节点,请在 ApplicationController 中添加以下方法:

    def default_serializer_options
      {root: false}
    end
    

    【讨论】:

    • 我确实有这个设置。我想我没有正确解释它。该对象有一个属性列表,包括联系人对象,我隐藏了所有其他属性。我只想让联系人对象成为根。
    【解决方案2】:

    对于使用 ActiveModel::Serializer v0.10.x 的用户,您需要创建一个初始化程序并包含以下内容:

    # config/initializers/serializer.rb
    ActiveModelSerializers.config.adapter = :json
    ActiveModelSerializers.config.json_include_toplevel_object = true
    

    然后,只需重新启动您的应用程序,您应该会获得所需的根对象。

    这适用于 Rails 5.1.x。 YMMV。 HTH。

    【讨论】:

      【解决方案3】:

      如果我没记错的话,通常根节点默认有你的控制器的名称。

      format.json { render json: @contacts}
      

      当然你需要去掉root false,它去掉了节点的名字。

      如果您希望联系人作为根对象,请使用:

      format.json { render json :@contacts, :root => 'contact' }
      

      【讨论】:

        【解决方案4】:

        /config/initializers/serializer.rb

        ActiveModelSerializers.config.adapter = :json_api # Default: `:attributes`
        

        默认情况下,ActiveModelSerializers 将使用属性适配器(否 JSON 根)。但我们强烈建议您使用 JsonApi Adapter,它 遵循 jsonapi.org/format 中指定格式的 1.0

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-02-20
          • 1970-01-01
          • 2017-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多