在Active Model Serializer中创建根节点

时间:2013-03-11 23:57:05

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

嘿伙计我使用Active Model Serializer以这种格式在我的Rails应用程序中有一个JSON数组

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

如何创建它以便我删除联系人上方的一级节点使用活动模型序列化程序,如下所示:

[
 {
 },
 {
 }
]

我还想删除节点名称“contact”

4 个答案:

答案 0 :(得分:25)

RailsCast #409 Active Model Serializers中介绍了这一点。

要删除根节点,请在控制器中root: false的调用中添加render。假设JSON中的contact来自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

答案 1 :(得分:5)

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

format.json { render json: @contacts}

当然你需要删除root false,它会删除节点的名称。

如果您想以root用户身份联系,请使用:

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

答案 2 :(得分:5)

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

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

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

这适用于Rails 5.1.x.因人而异。 HTH。

答案 3 :(得分:4)

  

/config/initializers/serializer.rb

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

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