Я добавил гем сериализатора активной модели в проект, и он сломал кучу вещей, один из наших API имеет очень специфический формат, который мне нужно сохранить, к сожалению, похоже, что я не могу получить устаревшее поведение.
#Models
class Parent < ActiveRecord::Base
attr_accessable, :id, :name, :options
has_many :children
end
class Child < ActiveRecord::Base
attr_accessable, :id, :name
end
#Controller
class ParentsController < ApplicationController
respond_to :json
def index
#Was
@parents = Parent.all
respond_with @parents, :include => [:children]
#Is (and is not working)
@parents = Parent.includes(:children)
respond_with @parents, each_serializer: ::ParentsSerializer, root: false #Not working
end
...
end
#Serializer
class ParentSerializer < ActiveModel::Serializer
attrs = Parent.column_names.map(&:to_sym) - [:options]
attributes(*attrs)
has_many :children
def filter(keys)
keys.delete :children unless object.association(:children).loaded?
keys.add :options
keys
end
end
Желаемый результат
[
{
"parent": {
"id": 1,
"name": "Uncle",
"options":"Childless, LotsOfLoot",
"children": []
}
},
{
"parent": {
"id": 2,
"name": "Mom",
"options":"<3 Gossip, SoccerMom",
"children": [
{
"child": {
"id": 10,
"name": "susy"
}
},
{
"child": {
"id": 11,
"name": "bobby"
}
}
]
}
}
]
Мне нужно, чтобы json был отформатирован таким образом, чтобы он не включал верхний корень, но включал дочерние корни... Я знаю, что мог бы пойти с чем-то вроде Rabl, но если есть простой чистый способ сделать это с помощью сериализаторов ActiveModel, это было бы лучше.