Оператор добавления «<<» больше не преобразует AssociationRelation в массивы и автоматически добавляет объект в Rails 5 после миграции из Rails 4. - PullRequest
0 голосов
/ 20 декабря 2018

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

Из другой части приложения:

_otherstuff = Thing.where("color = orange")
_otherstuff_ids = _otherstuff.collect &:id

Код проблемы:

things = Thing.where("color = red")       
things.each do |thing|
  if !_otherstuff_ids.include?(thing.id)
      _otherstuff << thing # Rails 5 is not happy with this anymore?
  end
end

Очевидно, что если я преобразую _otherstuff.to_a, то проблема исчезнет.Но мой вопрос заключается в том, почему сейчас это проблема с Rails 5, а с Rails 4 это не было проблемой. Похоже, что Rails 4 автоматически преобразовывал AssociationRelation в массив, а затем помещал в него новый объект.В документации Rails эта операция, по-видимому, добавляет новый объект к ассоциации, устанавливающей внешние ключи, чего не было в этом случае ... приложение ожидало такого поведения в нескольких областях.Что изменилось и что я должен знать сейчас?

1 Ответ

0 голосов
/ 20 декабря 2018

Похоже, что rails 5 больше не поддерживает << для отношения AR, потому что массив, в котором хранятся записи, будет заморожен </p>

Вы можете увидеть больше в выпуске

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...