Make root node in Active Model Serializer

Madhan picture Madhan · Mar 12, 2013 · Viewed 17.8k times · Source

I have an array of JSON in my Rails App in this format using Active Model Serializer:

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

How do I make it so that I remove one level of node above the contact USING active model serializer like this:

[
 {
 },
 {
 }
]

I also want to remove the node name "contact".

Answer

Paul Fioravanti picture Paul Fioravanti · Mar 12, 2013

This was covered in RailsCast #409 Active Model Serializers.

In order to remove the root node, you add root: false in the call to render in your controller. Assuming your contacts in JSON come from a contacts#index method, your code may look something like:

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

Or, if you don't want any root nodes in any of your JSON, in your ApplicationController, add the following method:

def default_serializer_options
  {root: false}
end