【问题标题】:Rails console 'y' helper returns NameError rather than yaml-formatting outputRails 控制台“y”助手返回 NameError 而不是 yaml 格式输出
【发布时间】:2012-07-19 06:49:53
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    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 所做的一切。

    【讨论】:

    • 爱 awesome_print!感谢您的推荐!
    • 如果你把那行 (YAML::ENGINE.yamler = 'syck') 放在你的 ~/.irbc 中,那么当你去加载 irb 或导轨控制台
    【解决方案2】:

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

    puts object.to_yaml
    

    【讨论】:

    • 这就是我一直在做的事情。但后来我遇到了我认为我使用 y 对象的速记。我想我错了:(
    猜你喜欢
    • 2012-04-20
    • 1970-01-01
    • 2011-02-20
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多