Rails: рендеринг json с несколькими объектами
Я пытаюсь вернуть несколько объектов с помощью вызова:
def index
beers = Beer.all
micros = Micros.all
render json: {beers: beers, micro: micros}
end
Однако для обоих объектов возвращается только атрибуты, перечисленные в уважаемых сериализаторах, а не какие-либо отношения has_many, own_to и т. Д. В уважаемых сериализаторах.
Если я просто пытаюсь вернуть один единственный объект, такой как:
def index
beers = Beer.all
render json: beers
end
Затем он работает нормально и возвращает все отношения, перечисленные в сериализаторе.
Как исправить вызов с несколькими объектами, чтобы он возвращал в сериализаторе все, а не только атрибуты?
2 ответа
Решение
Надеюсь помочь вам
def index
@beers = Beer.all
@micros = Micros.all
render json: {
beers: ActiveModel::Serializer::CollectionSerializer.new(@beers, each_serializer: BeerSerializer),
micros: ActiveModel::Serializer::CollectionSerializer.new(@micros, each_serializer: MicroSerializer),
}
end
У меня работает следующий фрагмент кода, ссылка https://github.com/rails-api/active_model_serializers/issues/1091#issuecomment-477015183
def index
@beers = Beer.all
@micros = Micros.all
render json: {
beers: ActiveModelSerializers::SerializableResource.new(@beers, each_serializer: BeerSerializer),
micros: ActiveModelSerializers::SerializableResource.new(@micros, each_serializer: MicroSerializer),
}
end
Чтобы проверить в консоли: просто введите.as_json
ActiveModelSerializers::SerializableResource.new(@beers, each_serializer: BeerSerializer).as_json