Уровень стека слишком глубокий, отношение принадлежат к хасу в 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