我正在为我的应用程序使用Active Model Serializer
gem。现在我遇到这种情况,用户可以拥有一个只是媒体ID的头像。
我将头像信息保存到Redis中。因此,目前我在序列化JSON中显示头像的方法是:
类UserSerializer< ::加载ActiveModel串行 包括阿凡达
attributes :id,
:name,
:email,
:role,
:avatar
def avatar
Medium.find(self.current_avatar)[0]
end
#has_one :avatar, serializer: AvatarSerializer
has_many :media, :comments
url :user
端
我查询Redis以了解数据库中要查找的媒介,然后使用:avatar
键中的结果。
在代码中还有一行注释掉,这是我在https://github.com/rails-api/active_model_serializers/页面上找到的关于在序列化器内使用自定义序列化器的唯一方法。
所以要解决我的问题。现在:avatar
就像它在数据库中一样,但是我希望它在我作为JSON提供之前被序列化。
在这种情况下我该怎么做?
答案 0 :(得分:1)
您需要序列化头像类:
class Avatar
def active_model_serializer
AvatarSerializer
end
end
然后你就这样使用:
class UserSerializer < ActiveModel::Serializer include Avatar
attributes :id,
:name,
:email,
:role,
:avatar
def avatar
# Strange you query another object
avatar = Medium.find(object.current_avatar).first
avatar.active_model_serializer.new(avatar, {}).to_json
end
has_many :media, :comments
url :user
end
答案 1 :(得分:0)
根据文档,如果您需要自定义序列化程序,则只需添加:
render json: avatar, serializer: AvatarSerializer
或您的序列化器名称可以是以下文档:
https://github.com/rails-api/active_model_serializers/blob/v0.10.6/docs/general/serializers.md#scope