【问题标题】:using ActiveModelSerializers and having children rendered with specific Seriazlier使用 ActiveModelSerializers 并使用特定的 Serialazlier 渲染子级
【发布时间】:2014-02-12 04:51:28
【问题描述】:

我有以下关系(使用 RoR 3.2.13 和祖先 2.0.0)并且真的需要一些帮助来配置序列化程序如何使用 MenuHeaderSerializer 呈现:

class Menu < ActiveRecord::Base
  has_many :menu_headers
end

class MenuHeader < ActiveRecord::Base
  has_ancestry  # the nested relationship
  has_many :items
  belongs_to :menu
end

class Item < ActiveRecord::Base
 belongs_to :menu_header
end

我的序列化器很容易解释,看起来像这样:

class MenuSerializer < ActiveModel::Serializer
  attributes :id, :name, :menu_headers
  has_many :menu_headers
end

class MenuHeaderSerializer < ActiveModel::Serializer
  attributes :id, :name, :children # <- this needs to be called and wrapped in a MenuHeaderSerializer; it basically just dumps eveything like to_json
  #has_many :items
end

所以我对孩子的调用应该使用 MenuHeaderSerializer 返回孩子。这有意义吗?

我已经尝试了我认为的所有变体,如下所示:

class MenuHeaderSerializer < ActiveModel::Serializer
  attributes :id, :name, :sub # :children #, :sub
  def sub
    MenuHeaderSerializer.new(children)
    #object.children
  end

或试图强迫孩子使用 MenuHeaderSerializer 但我不知所措。任何帮助将不胜感激。

可能是这样的:

 attributes :id, :name, :children serializer: MenuHeaderSerializer # doesn't work

谢谢

【问题讨论】:

  • 我正在尝试找出类似的东西。有人建议我在 ActiveModelSerializer 中使用embed :ids, include: true。但我不确定我将如何使用 Ancestry 进行这项工作,因为该行适用于 has_many 关联。

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


【解决方案1】:

不确定祖先,但你可以做

has_many :children, each_serializer: MenuHeaderSerializer

【讨论】:

  • 此解决方案将产生 n+1 个查询。
猜你喜欢
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
  • 2021-03-08
  • 2017-03-06
  • 2014-04-23
  • 1970-01-01
  • 2019-04-26
相关资源
最近更新 更多