我们将应用程序从Rails 4.1.14升级到4.2.5.1并遇到以下问题:
string = "SomeString"
ar_model = SomeArModel.new
ar_model.some_attribute = string
# next line is true for 4.1, but fails for 4.2
ar_model.some_attribute.object_id == string.object_id
显然,对象设置器会复制每个对象(如果我有一个数组,内部的每个对象都会被欺骗),我想知道,如果这是预期的并且是一些新的安全功能的一部分?
更新
我将ruby-2.2.2p95用于两个rails版本。作为参考,我做了一个小项目:
rails new testproject
rails g model Building name:string
rails db:migrate
rails c
>> b = Building.new
>> name = "Testname"
>> b.name = name
>> name.object_id # => 70199493308960
>> b.name.object_id # => 70199493278780
之后,我只在Gemfile中将Rails版本更改为4.1.14,并再次尝试=>两个object_ids都是一样的。 所以它不能仅仅依赖 在Ruby版本上......
UPDATE2
对于ruby-2.2.3和JRuby 9.0.4.0也适用...
ar_model.attributes_before_type_cast['some_attribute']
包含真实对象。