【问题标题】:Active Model Serializer Conditional Associations活动模型序列化器条件关联
【发布时间】:2014-04-30 14:21:25
【问题描述】:

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

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

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?

【问题讨论】:

  • Group 是否有一个名为invisible 的字段?您是否定义了 invisible?get_group 之类的方法,或者这只是一个示例。
  • 是的,get_group 和隐形?是现有的方法。

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


【解决方案1】:

假设您是using version ~> 0.8.0,您应该可以将以下内容放入您的PostFeedSerializer

def include_group?
  !object.get_group.invisible?
end

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

看起来像 in future versions,AMS 将转移到 filter 而不是 include_x? 方法。

【讨论】:

  • 这方面的文档在哪里?
【解决方案2】:

对于使用更新版本的 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

【讨论】:

  • 我害怕更新的 Active Model Serializer。变化太大。
  • 我添加了另一种方法,您也可以达到相同的结果。不要害怕改变我的小蚂蚱。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多