Rails控制台’y’帮助器返回NameError而不是yaml格式化输出

我正在尝试在Rails 3.2.6 / Ruby 1.9.3控制台中使用y object为ActiveRecord对象获取格式良好的yaml输出,但由于某种原因它不适合我。 我过去曾经用过它,但是在它破坏的某个地方。 我尝试时得到以下输出:

 NameError: undefined local variable or method `yaml' for main:Object 

y方法实际上是Syck YAML解析器/发射器实现的Kernel对象的扩展。 以下是lib/ruby/1.9.1/syck.rb的最后几行:

 module Kernel def y( object, *objects ) objects.unshift object puts( if objects.length == 1 YAML.dump( *objects ) else YAML.dump_stream( *objects ) end ) end private :y end 

默认情况下,Ruby 1.9.3使用Psych解析器/发射器而不是Syck(我只能假设它们的发音方式不同),并且Psych没有声明这样的方法。

如果你真的喜欢y ,你可以在控制台中使用Syck而不是Psych:

 Loading development environment (Rails 3.2.5) 1.9.3p194 :001 > y 'hello' NoMethodError: undefined method 'y' for main:Object 1.9.3p194 :002 > YAML::ENGINE.yamler = 'syck' "syck" 1.9.3p194 :003 > y 'hello' --- hello nil 

我也将利用这个机会来插入awesome_print ,这基本上可以解决你为YAML所做的一切。

对于rails 4 / ruby​​ 2你可以使用

 puts object.to_yaml