14

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

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

2 回答 2

35

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,它基本上y适用于 YAML 的所有功能。

于 2012-07-20T02:29:43.247 回答
8

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

puts object.to_yaml
于 2013-12-04T00:30:58.800 回答