【发布时间】:2012-07-09 03:19:39
【问题描述】:
我需要在 Rails 上下文中使用 YAML 序列化 ruby Ranges。
我想检查整数范围和字符串范围是否正确序列化。
这是我的测试:
# classic irb
require 'yaml' # => true
YAML::VERSION # => "0.60"
YAML.dump(1..2) # => "--- !ruby/range \nbegin: 1\nend: 2\nexcl: false\n"
YAML.dump("1".."2") # => "--- !ruby/range \nbegin: \"1\"\nend: \"2\"\nexcl: false\n"
这两个输出完全不同,所以我向前并在我的 rails 应用程序中对其进行了编码。
然而,在 Rails 上下文中,ruby 似乎忘记了如何正确序列化整数范围!
# ./script/rails console
Rails::VERSION::STRING # => "3.0.15"
RUBY_VERSION # => "1.8.7"
YAML::VERSION # => "0.60"
YAML.dump(1..2) # => "--- !ruby/range\n begin: 1\n end: 2\n excl: false"
YAML.dump("1".."2") # => "--- !ruby/range\n begin: 1\n end: 2\n excl: false"
# The two outputs are identical, the distinction between integers and strings is lost!
ruby 和 ruby on rails 似乎都使用相同版本的 YAML 库。 如果我没记错的话,我的 ruby 版本不支持在多个编码器引擎之间切换。
我有几个问题:
- 造成这种差异的原因是什么?
- 较新版本的 ruby / rails 是否会出现此问题?
- 如何以兼容的方式正确解决该问题?
感谢您的帮助。
【问题讨论】:
-
这2种情况下YAML::ENGINE.yamler的值是多少?
-
NameError: uninitialized constant YAML::ENGINE在这两种情况下,我猜这是由于
标签: ruby-on-rails ruby serialization range yaml