Ruby on rails 序列化自定义属性
我正在为我的应用程序使用Ruby on rails 序列化自定义属性,ruby-on-rails,json,serialization,active-model-serializers,Ruby On Rails,Json,Serialization,Active Model Serializers,我正在为我的应用程序使用activemodelserializergem。现在我遇到了这样的情况,用户可以拥有一个化身,它只是媒体的ID 我把化身信息保存到Redis中。因此,目前我在序列化JSON中显示化身的方法是: 类UserSerializer
activemodelserializer
gem。现在我遇到了这样的情况,用户可以拥有一个化身,它只是媒体的ID
我把化身信息保存到Redis中。因此,目前我在序列化JSON中显示化身的方法是:
类UserSerializerattributes :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
键中使用结果
在代码下面还有一行注释掉了,这是我在页面上找到的关于在序列化程序内部使用自定义序列化程序的唯一方法
所以来解决我的问题。现在,:avatar
就像它在数据库中一样,但我希望它在作为JSON提供之前被序列化。
在这种情况下,我该怎么做?您需要序列化Avatar类:
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
class UserSerializer
根据文档,如果您想要自定义序列化程序,只需添加:
render-json:avatar,serializer:AvatarSerializer
或者,无论序列化程序的名称是什么,以下是文档:
请您解释一下“avatar,它只是一种媒体的if”是什么意思?一定是打字错误,avatar只是我从Redis获取媒体ID的一个类。所以化身只是一个用户选择的媒介,它在后端只被标记为medium_id。