Уровень стека слишком глубокий, отношение принадлежат к хасу в API Rails и active_model_serializer

У меня есть простые отношения между двумя моделями, коллекциями и работами. Коллекция имеет много работ, и работа принадлежит коллекции.

Сериализатор коллекции:

#collection_serializer.rb

class CollectionSerializer < ActiveModel::Serializer
  self.root = true

  attributes :id, :title

  has_many :works, embed: :ids, embed_in_root: true, key: :works
  has_one  :user, embed: :id, key: :user
end

Сериализатор работы

#work_serializer.rb

class WorkSerializer < ActiveModel::Serializer
  attributes :id, :title, :min_year, :max_year, :longitude, :latitude, :circa, :place, :created_at, :updated_at

  has_one   :collection, embed: :id, embed_in_root: false
end

Когда я вызываю коллекцию, я вызываю коллекцию из своего приложения (Ember), я получаю SystemStackError - слишком большой уровень стека. Вот контроллер в Grape, который я использую для вызова коллекции:

module API
  module V1
    class Collections < Grape::API
      include API::V1::Defaults

      resource :collections do
        desc "Return a collection"
        params do
          requires :id, type: String, desc: "ID of the collection"
        end
        get ":id", root: "collection" do
          Collection.where(id: permitted_params[:id]).first!
        end
      end
    end
  end
end

Это кажется достаточно простым делом, но я могу понять эту ошибку. Спасибо!

1 ответ

Я рекомендую вам создать новый сериализатор для Work который не будет включать collection,

Тогда в вашей работе сериализатор:

has_many :works, embed: :ids, embed_in_root: true, key: :works, serializer: YourNewWorkSerializerClass
Другие вопросы по тегам