Попытка обновить зависимости rails приводит к тому, что сериализаторы вызывают ошибку: неопределенный метод `имя_модели 'для Ha sh: Clas - PullRequest
0 голосов
/ 28 апреля 2020

Я обновил рельсы до 5.2.4.2 по установленному приложению рельсов через несколько месяцев go с минимальными обновлениями зависимостей рельсов; Приложение снова стабилизировалось, поэтому мы решили обновить все зависимости rails до его последних совместимых версий.

Теперь, когда у контроллера есть json вызов рендеринга в простой (не db-модель) класс, сообщение об ошибке.

пример

Это сериализатор:

class Api::MessageResponseSerializer < ApplicationSerializer
  self.version = 1

  attributes :message, :changes

  def message
    self.object[:message]
  end

  def changes
    self.object[:changes]
  end
end

вызов

render :json => { :message => "Not Ready Yet"}, :serializer => Api::MessageResponseSerializer

Я получаю сообщение об ошибке:

NoMethodError:
       undefined method `model_name' for Hash:Class

вызов

render :json => [{ :message => "Not Ready Yet"}], :serializer => Api::MessageResponseSerializer

Я получаю сообщение об ошибке:

 NoMethodError:
       undefined method `model_name' for Array:Class

вызов (я знаю, что это не правильно json, это просто для иллюстрации того, что возникает та же ошибка)

render :json => 1, :serializer => Api::MessageResponseSerializer

Я получаю сообщение об ошибке:

NoMethodError:
       undefined method `model_name' for Integer:Class

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

1 Ответ

0 голосов
/ 28 апреля 2020

Кажется, существует жесткое требование наличия ключа root для сериализации JSON, представленного как часть гема active_model_serializers в версии 0.10.10 (которая была автоматически установлена ​​при обновлении пакета) ;

Я понизил этот гем до версии 0.10.9, и проблемы с сериализацией прекратились ...

...