ActiveModel::Serializers и Ember Data — правильное моделирование моего сериализатора для использования с Ember Data

В моем приложении комментарии Post has_many и Post Comment belongs_to (смоделированы с помощью отношения has_one в моих сериализаторах).

Поскольку я получаю сообщение об ошибке Stack Level Too Deep всякий раз, когда пытаюсь смоделировать оба этих отношения в своих сериализаторах, мне интересно, следует ли мне сохранить ассоциации has_many или has_one.

У меня также есть инициализатор, который встраивает :ids и загружает данные.

Спасибо за любую помощь, ребята. Я гуглил это, клянусь!


person Kurt Mueller    schedule 12.07.2014    source источник


Ответы (1)


Для этих отношений ваши сериализаторы должны выглядеть так:

class PostSerializer < ActiveModel::Serializer
  embed :ids

  attributes :id # add other attributes here

  has_many :comments
end

class CommentSerializer < ActiveModel::Serializer
  embed :ids

  attributes :id # add other attributes here

  has_one :post
end

Если вы получаете слишком глубокую ошибку уровня стека, скорее всего, это связано с тем, что идентификаторы не внедрены. Без встроенных идентификаторов он будет пытаться встроить комментарии в сообщение и для каждого комментария снова вставлять сообщение, которое затем снова встраивает комментарии и так далее в бесконечном цикле.

Вы также должны убедиться, что используете DS.ActiveModelSerializer и DS.ActiveModelAdapter в вашем приложении ember.

person HeroicEric    schedule 13.07.2014
comment
Идентификаторы встроены. Теперь гем AMS рекомендует использовать инициализатор, который устанавливает config.embed = :ids и config.embed_in_root = true. Документы Ember не слишком полезны в этом отношении. Я закончил тем, что сохранил свои отношения has_many и убил отношения has_one. EmberData, похоже, это понимает. - person Kurt Mueller; 16.07.2014