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

时间:2012-07-20 01:52:58

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-console to-yaml

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

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

2 个答案:

答案 0 :(得分:35)

y方法实际上是Syck YAML parser/emitter放置的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 parser/emitter代替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所做的一切。

答案 1 :(得分:8)

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

puts object.to_yaml