Rails console 'y' helper returns NameError rather than yaml-formatting output

前端 未结 2 797
醉话见心
醉话见心 2020-12-14 10:44

I\'m trying to use y object in Rails 3.2.6/Ruby 1.9.3 console to get nicely formatted yaml output for an ActiveRecord object, but for some reason it isn\'t work

相关标签:
2条回答
  • 2020-12-14 11:14

    For rails 4/ruby 2 you could use just

    puts object.to_yaml
    
    0 讨论(0)
  • 2020-12-14 11:36

    The y method is actually an extension to the Kernel object put in place by the Syck YAML parser/emitter. Here are the last few lines of 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
    

    By default, Ruby 1.9.3 uses the Psych parser/emitter instead of Syck (I can only presume they're pronounced differently), and Psych doesn't declare such a method.

    If you really loved y, you can simply use Syck instead of Psych in the console:

    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
    

    I'll also use this chance to plug awesome_print, which does for basically everything what y does for YAML.

    0 讨论(0)
提交回复
热议问题