使用ActiveModelSerializers并让孩子们使用特定的Seriazlier进行渲染

时间:2014-02-12 04:51:29

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

我有以下关系(使用RoR 3.2.13和ancestry 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

THX

1 个答案:

答案 0 :(得分:1)

不确定Ancestery但你能做到

has_many :children, each_serializer: MenuHeaderSerializer