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
Другие вопросы по тегам