活动模型序列化器条件关联

时间:2014-04-30 14:21:26

标签: ruby-on-rails-3 ruby-on-rails-4 active-model-serializers

是否可以在逐个记录的基础上有条件地在活动模型序列化程序中包含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?

2 个答案:

答案 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