Ruby on rails Rails 3.2,保存序列化哈希不会保存带有分隔符()的数字
在Rails 3.2.21中,保存序列化散列可能无法保存来自一个指定的NumberHelper的值,Ruby on rails Rails 3.2,保存序列化哈希不会保存带有分隔符()的数字,ruby-on-rails,active-model-serializers,Ruby On Rails,Active Model Serializers,在Rails 3.2.21中,保存序列化散列可能无法保存来自一个指定的NumberHelper的值,helper.number\u和_分隔符 在Rails 3.2应用程序中,在model Foo中,我有: serialize :stuff, Hash 在控制台中: f = Foo.create f.stuff = { a: "aaaa", b: 1111, c: helper.number_with_delimiter(123456) } => {:a=>"aaaa", :b=&g
helper.number\u和_分隔符
在Rails 3.2应用程序中,在model Foo中,我有:
serialize :stuff, Hash
在控制台中:
f = Foo.create
f.stuff = { a: "aaaa", b: 1111, c: helper.number_with_delimiter(123456) }
=> {:a=>"aaaa", :b=>1111, :c=>"123,456"} # so far so good
f.save!
f.stuff
=> {:a=>"aaaa", :b=>1111, :c=>123456} # c should be a STRING
它确实可以与helper.number\u to\u currency()一起正常工作。
如果我设置c:String.new(helper.number带有分隔符(123456))
,它就会工作
这是一个Rails错误,还是我做错了什么?是的,这是一个Rails(ActiveSupport)错误,最终在Rails 4.2.1中得到了修复。从4.2.1发行说明中:
修复了AS::SafeBuffer的往返问题,类似于原语的字符串将作为原语转储
使用带有分隔符的helper.number\u时,结果对象的外观和行为类似于字符串,但实际上它是一个ActiveSupport::SafeBuffer
helper.number_with_delimiter(123456).class # => ActiveSupport::SafeBuffer < String
这意味着后台Rails使用YAML格式将数据保存到数据库中。SafeBuffer中存在一个错误,导致像“123”
这样的SafeBuffer在保存和从YAML加载时被错误地转换为整数(即123
),而不是剩余的字符串
同样,从Rails 4.2.1开始,这一点现在已经固定。您可以在此处看到修复:
同样发生在Rails 4.2.0上;看起来更像是rails的bug。这似乎在rails 4.2.3中得到了修复。
serialize :stuff, Hash