2

У меня есть следующие соотношениям (используя RoR 3.2.13 и 2.0.0 родословную) и ДЕЙСТВИТЕЛЬНО нужна помощь в настройке, как сериализатору делает с MenuHeaderSerializer:использования ActiveModelSerializers и имеющие детей, оказываемых с конкретным Seriazlier

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 

ТНХ

+0

Я пытаюсь выяснить что-то подобное. Мне было предложено использовать 'embed: ids, include: true' в ActiveModelSerializer. Но я не уверен, как я собираюсь сделать эту работу с Ancestry, поскольку эта строка предназначена для ассоциаций has_many. –

ответ

1

не уверен Ancestery, но вы можете сделать

has_many :children, each_serializer: MenuHeaderSerializer

+0

Это решение будет производить запрос n + 1. – merqlove

 Смежные вопросы

  • Нет связанных вопросов^_^