是否可以在逐个记录的基础上有条件地在活动模型序列化程序中包含has_one关联?
在我的情况下,我不需要返回一个名为" group"如果该组属于"隐形"。这是我的序列化程序的一个片段。
class PostFeedSerializer < ActiveModel::Serializer
attributes :id, :title, :thumbnail_photo, :view_count, :ago, :created_by
has_one :group, serializer: GroupSerializer
我想做的事情是:
has_one :group, serializer: GroupTinySerializer unless object.get_group.invisible?
答案 0 :(得分:12)
假设您是using version ~> 0.8.0,您应该可以将以下内容放入PostFeedSerializer
。
def include_group?
!object.get_group.invisible?
end
只要group
返回true,就会有条件地包含include_group?
对象。
看起来像in future versions,AMS将转移到filter
而不是include_x?
方法。
答案 1 :(得分:1)
对于使用更新版本的Active Model Serializer的人来说,解决方案是:
def filter(keys)
keys.delete :group unless !object.get_group.invisible?
keys
end
你也可以这样做:
has_one :group, serializer: GroupTinySerializer, unless: -> { invisible? }
def invisible?
object.get_group.invisible?
end