【问题标题】:Migrating ActiveModel::Serializer down from v0.9.2 to 0.8, has_many not being serialised将 ActiveModel::Serializer 从 v0.9.2 迁移到 0.8,has_many 没有被序列化
【发布时间】:2015-03-19 02:37:24
【问题描述】:

我有以下ActiveModel::Serializer

class MyThingySerializer < ActiveModel::Serializer
  root false

  attributes :id, :name, :description

  has_many :whatsits, embed_namespace: :_embedded

  delegate :whatsits, to: :object

end

它在 AMS 0.9.2 下运行良好,但是为了使用 include_attributename? 机制添加可选属性,我被告知回滚到 AMS 0.8

现在我的whatsits 不会出现在_embedded 属性下的序列化输出中。

我需要做一些特别的事情来恢复我嵌入的 whatsits 吗?

更新

我已尝试将以下方法添加到我的序列化程序:

def whatsits
  associated = self.class._associations[:whatsits]
  associated.options[:root] = associated.options[:embed_namespace]
  associated.options[:embed] = :objects
  associated.options[:include] = true
  object.whatsits
end

希望这将使序列化程序在_embedded 键下发出whatsits 列表,但可惜这不起作用..

【问题讨论】:

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


【解决方案1】:

这行得通。

class MyThingySerializer < ActiveModel::Serializer
  root false

  attributes :id, :name, :description, :_embedded

  # force the whatsits list to sit under '_embedded'.
  def _embedded
    {
      whatsits: object. whatsits.map {|whatsit| WhatsitSerializer.new(whatsit) } || []
    }
  end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-02-01
    • 2021-09-21
    • 2018-10-07
    相关资源
    最近更新 更多