如何在RegistrationSerializer嵌套关联中仅返回Student指定属性?
解决ActiveModel::Serializer关联模型仅返回指定属性的问题
我来帮你搞定这个需求!你希望在RegistrationSerializer里关联student时只返回:first_name属性,同时又不想修改全局的StudentSerializer(毕竟其他场景还要用完整的序列化内容),这里有两种靠谱的实现方式:
方法一:使用匿名序列化逻辑(快速简洁)
直接在has_one的代码块里返回你需要的属性,这种方式适合只需要少量属性的场景:
class RegistrationSerializer < ActiveModel::Serializer attributes :id, :status has_one :student do # 只返回student的first_name属性 object.student.slice(:first_name) end has_one :professor has_one :course end
这样返回的student字段只会包含:first_name,完全不会影响其他地方的StudentSerializer使用。
方法二:定义嵌套的迷你序列化器(规范易扩展)
如果以后可能需要给这个场景下的student增加更多属性,推荐在RegistrationSerializer内部定义一个嵌套的迷你序列化器,结构更清晰:
class RegistrationSerializer < ActiveModel::Serializer attributes :id, :status # 嵌套定义仅用于当前场景的Student迷你序列化器 class StudentMiniSerializer < ActiveModel::Serializer attributes :first_name end has_one :student, serializer: StudentMiniSerializer has_one :professor has_one :course end
这个嵌套的StudentMiniSerializer只会在当前的RegistrationSerializer里生效,完全不会干扰全局的StudentSerializer,后续要加属性直接修改这个嵌套类就行,非常灵活。
这两种方法都能完美满足你的需求,根据自己的场景选就行~
内容的提问来源于stack exchange,提问作者Cory Baker
相关产品推荐
相关产品推荐

