1

Блин, опять я ...RocketPants и ActiveModelSerializers пользовательских Serializer

Цитата RocketPants мерзавец:

Support for active_model_serializers - If you want to use ActiveModelSerializers, we'll take care of it. Even better, in your expose call, pass through :serializer as expected and we'll automatically take care of invoking it for you.

Так вот что я пытаюсь сделать:

def friends 
    @user = User.find_by_id(params[:id]) 
    expose @user.friends.first(params[:limit].to_i), serializer: UserJustNameSerializer 
end 

И вот как Я реализую свои сериализаторы в user_serializer.rb:

class UserSerializer < ActiveModel::Serializer 
.... 
end 

class UserJustNameSerializer < ActiveModel::Serializer 
    attributes :id, :first_name, :last_name, :full_name, :avatar_thumb 

    def avatar_thumb 
    object.avatar.url(:thumb) 
    end 
end 

Использование expose без serializer опция правильно подготавливает JSON согласно UserSerializer. Попытка использовать UserJustNameSerializer дает эту ошибку:

NameError (uninitialized constant Api::V1::UsersController::UserJustNameSerializer) 

Таким образом, вопрос: как правильно показать RocketPants путь к моему сериализатору? Теперь он пытается найти его в UserController.

+0

, где находится ваш UserJustNameSerializer, является то, доступным в консоли. Попробуйте следующее: ' expose @ user.friends.first (params [: limit] .to_i), serializer: :: UserJustNameSerializer ' – VelLes

+0

@VelLes 'NameError (неинициализированная константа UserJustNameSerializer):' now. Я действительно не знаю, что такое глобальный путь к этому классу. – ProdoElmit

+0

Хм ... Подождите, у меня есть проблема. Перемещено 'UserJustNameSerializer' в другой файл, теперь ошибка отличается:' undefined method 'read_attribute_for_serialization 'для []: Array'. Идти в эту проблему. – ProdoElmit

ответ

2

Так что, как всегда, только после размещения вопрос я получаю в ответ =)

Решение является: Место UserJustNameSerializer в свой собственный файл user_just_name_serializer.rb и использовать each_serializer: вместо serializer:, как я пытаюсь сериализации массив, а не один объект.

Для тех, кто Google: Если я использую serializer: UserJustNameSerializer на массиве, я получаю

NoMethodError (undefined method `read_attribute_for_serialization' for []:Array): 
Смежные вопросы