该死,又是我.
引用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正确地准备JSON。尝试使用UserJustNameSerializer会出现以下错误:
NameError (uninitialized constant Api::V1::UsersController::UserJustNameSerializer)因此,问题是:如何正确地向RocketPants展示通向序列化程序的方法?现在它正试图在UsersController中找到它。
发布于 2013-12-05 23:30:58
所以,和往常一样,只有在发完问题后,我才能回答=)
解决方案是:将UserJustNameSerializer放到自己的文件user_just_name_serializer.rb中,使用each_serializer:而不是serializer:,因为我试图序列化数组,而不是单个对象。
对于那些谷歌用户:如果我在数组上使用serializer: UserJustNameSerializer,我会得到
NoMethodError (undefined method `read_attribute_for_serialization' for []:Array):https://stackoverflow.com/questions/20411330
复制相似问题