При обновлении с Rails 4.2 до Rail 5 возникла ошибка устаревания:
ПРЕДУПРЕЖДЕНИЕ О УСТАРЕВАНИИ: набор ActiveModel :: Errors # устарел и будет удален в Rails 5.1.Вместо этого используйте model.errors.add (: foo, ["required"]).
Хорошо, достаточно просто.Поэтому я изменил его на model.errors.add(:foo, ['message'])
, однако затем одна из моих спецификаций начала переходить в бесконечный цикл (из того, что я мог сказать, это было связано с массивом с самоссылкой, передаваемым в рендер, а затем с методом to_json
).
Итак, я бросил pry и заметил, что ошибки в моей модели включают странный элемент [...]
:
["is required", [...]]
Выше, что происходит, когда я вызываю метод add
против set
метод.С другой стороны, метод set
просто возвращает ["is required"]
- без второго элемента [...]
.Когда я пытаюсь сослаться на этот элемент - он просто возвращает весь массив:
> result.second
=> ["is required", [...]]
Другая интересная находка заключается в том, что когда я вызываю object_id
для него, он указывает на родительский массив:
> result.object_id
=> 47158376546320
> result.second.object_id
=> 47158376546320
Итак, мой вопрос:
- Почему метод
add
добавляет второй элемент массива, который является просто ссылкой на сам массив?
Примечание:для справки я на самом деле на 5.0.6, еще не обновился до 5.1.