【问题标题】:RocketPants and ActiveModelSerializers custom serializerRocketPants 和 ActiveModelSerializers 自定义序列化器
【发布时间】:2013-12-05 21:39:34
【问题描述】:

该死的,又是我……

引用RocketPantsgit:

支持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

使用不带serializer 选项的expose 可以根据UserSerializer 正确准备JSON。尝试使用 UserJustNameSerializer 会出现此错误:

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

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

【问题讨论】:

  • 您的 UserJustNameSerializer 在哪里,是否可以在控制台中访问。试试这个:`暴露@user.friends.first(params[:limit].to_i),序列化器:::UserJustNameSerializer `
  • @VelLes NameError (uninitialized constant UserJustNameSerializer): 现在。我真的不知道,这个类的“全局路径”是什么。
  • 嗯...等等,我遇到了一个问题。将UserJustNameSerializer 移动到另一个文件,现在错误不同:undefined method read_attribute_for_serialization' for []:Array`。打算深入研究这个问题..
  • 好的,解决了。发布答案。

标签: ruby-on-rails serialization active-model-serializers


【解决方案1】:

所以,和往常一样,只有在发布问题后我才能回答 =)

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

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

NoMethodError (undefined method `read_attribute_for_serialization' for []:Array):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 1970-01-01
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多