追加运算符"<<"从 Rails 4 迁移后不再将关联关系转换为数组并在 Rails 5 上自动添加对象



我最近继承并更新了一个非常广泛的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正在自动将关联相关转换为阵列,然后将新对象推入其中。在Rails的文档中,此操作显然将新对象添加到设置外国钥匙的关联中,在这种情况下,情况并非如此。该应用程序已经期望在少数地区进行这种行为。发生了什么变化,我现在应该知道什么?

看起来像Rails 5不支持&lt;&lt;再使用AR关系,因为存储记录的数组将被冻结

您可以在该问题中看到更多

最新更新