5

是否可以有条件地在活动模型序列化程序中逐条记录地包含 has_one 关联?

在我的情况下,如果组是“不可见”类型,我不需要返回一个名为“组”的关联。这是我的序列化程序的一个片段。

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?
4

2 回答 2

12

假设您使用版本 ~> 0.8.0,您应该能够将以下内容放入您的PostFeedSerializer.

def include_group?
  !object.get_group.invisible?
end

只要返回 true ,就会有条件地包含该group对象。include_group?

看起来在未来的版本中,AMS 将filter取代include_x?方法。

于 2014-05-01T01:26:34.893 回答
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
于 2017-11-30T14:16:31.457 回答