1

У меня есть приложение rails, в котором я использую gem active_model_serializers. В моих ответах я хотел бы вложить свои результаты внутри родителя "data":. В настоящее время, когда я не получаю никаких данных для ответа я получаю следующий JSON:Rails ActiveModel :: ответ сериализатора в «данных»: родительский

[] 

То, что я хочу, это что-то вроде этого:

{ 
    "data": [] 
} 

Я также хотел бы использовать тот же формат случаи, когда у меня есть данные, как это:

{ 
    "data": [ 
    { 
     "id": 135, 
     [...] 

мне удалось получить структуру, я хочу с помощью render json, например:

render json: { data: respond_values} 

Но в этом случае мой сериализатор игнорируется, и все атрибуты в моей модели возвращаются. Моя serialiser выглядит следующим образом:

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 мои serialiser работает, но я не получаю структуру, я хочу - родитель данных/контейнер отсутствует.

Любые идеи о том, что мне нужно, чтобы заставить мой сериализатор работать правильно?

+1

Try: 'делают JSON: respond_values, each_serializer: TranslationSerializer, корень:«data'' – 7urkm3n

ответ

2

Во-первых, если вам не нужно поддерживать наследство API использовать JSON:API адаптер:

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

В то время как никто полностью не согласен со всеми проектными решениями в 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 
+0

Спасибо, я пытался использовать сборку в 'json_api' адаптер, но я не мог заставить его (https://github.com/rails-api/active_model_serializers/blob/master/docs/general/adapters.md). Я создал инициализатор следующим образом: 'initializers/active_model_serializers.rb' с' ActiveModelSerializers.config.adapter =: json_api', но ничего не произошло. – Anders

+0

Вы пытались перезапустить свой сервер?Файлы инициализации читаются при запуске сервера. – max

+0

Да, я сделал. Но он ничего не делает. – Anders

0

По какой-либо причине, Rails не найти Serializer, который соответствует образцу. Возможно, что-то отсутствует в названии/пространстве условных обозначений вашей модели с помощью сериализатора.

https://github.com/rails-api/active_model_serializers/blob/master/docs/general/rendering.md

Но, если вы явно объявить сериалайзер, он должен работать.

render json: @post, serializer: PostPreviewSerializer 

 Смежные вопросы

  • Нет связанных вопросов^_^