2013-03-11 2 views
10

Эй, ребята, у меня есть массив JSON в моей Rails приложения в этом формате с использованием активной модели SerializerСделать корневой узел в Active Model Serializer

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

Как сделать так, чтобы я удалить один уровень узла выше контакт с помощью активной модели сериалайзер так:

[ 
{ 
}, 
{ 
} 
] 

Я также хочу, чтобы удалить имя узла «контакт»

ответ

24

Это было покрыто в RailsCast #409 Active Model Serializers.

Чтобы удалить корневой узел, вы добавляете root: false в звонок render в свой контроллер. Если предположить, что ваши contact s в формате JSON приходят из метода 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 
+0

Я действительно действительно есть эта setup. Наверное, я не объяснил это правильно. Объект имеет список атрибутов, включая контактный объект, и я скрыл все остальные атрибуты. Я просто хочу, чтобы контактным объектом был корень. – Madhan

5

Обычно корневой узел имеет имя вашего контроллера по умолчанию, если я не ошибаюсь.

format.json { render json: @contacts} 

Конечно, вам нужно удалить корень false, он удаляет имя узла.

Если вы хотите связаться, как использование корневого объекта этого:

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

/config/initializers/serializer.rb

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

По ActiveModelSerializers умолчанию будет использовать Атрибут атрибутов (нет JSON root). Но мы настоятельно рекомендуем использовать JsonApi Adapter, который следует 1.0 формата, указанного в jsonapi.org/format.

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. НТН.