1

妈的,又是我……

RocketPants来自git的引用:

支持active_model_serializers- 如果您想使用 ActiveModelSerializers,我们会处理它。更好的是,在您的公开调用中,:serializer按预期通过,我们会自动为您调用它。

所以这就是我尝试做的:

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选项使用是根据UserSerializer. 尝试使用UserJustNameSerializer会出现此错误:

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

所以问题是:如何正确地显示RocketPants我的序列化器的方式?现在它试图在 UsersController 中找到它。

4

1 回答 1

2

因此,与往常一样,只有在发布问题后我才能回答 =)

解决方案是:放入UserJustNameSerializer自己的文件user_just_name_serializer.rb并使用each_serializer:而不是serializer:,因为我正在尝试序列化一个数组,而不是单个对象。

对于那些谷歌的人:如果我serializer: UserJustNameSerializer在数组上使用,我会得到

NoMethodError (undefined method `read_attribute_for_serialization' for []:Array):
于 2013-12-05T23:30:58.313 回答