我正在尝试y object
在Rails 3.2.6/Ruby 1.9.3控制台中使用为ActiveRecord对象获取格式良好的yaml输出,但由于某种原因它不适合我.我过去曾经用过它,但是在它破坏的路上.我尝试时得到以下输出:
NameError: undefined local variable or method `yaml' for main:Object
Run Code Online (Sandbox Code Playgroud) ruby-on-rails to-yaml rails-console ruby-on-rails-3 ruby-on-rails-3.2
根据YAML文档,可以将选项的散列传递给.to_yaml
方法.
目前,当我按照文档建议传递选项时,它不起作用,哈希被忽略.
irb(main):001:0> require 'yaml'
=> true
irb(main):002:0> user = { "1" => { "name" => "john", "age" => 44 } }
user.to_yaml
=> "--- \n\"1\": \n name: john\n age: 44\n"
Run Code Online (Sandbox Code Playgroud)
现在,传递一些选项:
irb(main):014:0> user.to_yaml( :Indent => 4, :UseHeader => true, :UseVersion => true )
=> "--- \n\"1\": \n name: john\n age: 44\n"
irb(main):015:0> user.to_yaml( :Separator => "\n" )
=> "--- \n\"1\": \n name: john\n age: 44\n"
irb(main):016:0> user.to_yaml( :separator => "\n" )
=> "--- …
Run Code Online (Sandbox Code Playgroud) to_yaml方法产生不错的YAML输出,但是我想在某些元素之前添加注释行。有办法吗?
例如,我想生产:
# hostname or IP address of client
client: host4.example.com
# hostname or IP address of server
server: 192.168.222.222
Run Code Online (Sandbox Code Playgroud)
从类似于:
{
:client => 'host4.example.com',
:server => '192.168.222.222',
}.to_yaml
Run Code Online (Sandbox Code Playgroud)
...但是不确定YAML模块是否有办法实现。
更新:我最终没有使用使用正则表达式插入注释的解决方案,因为它需要将数据与注释分开。对我来说,最简单,最容易理解的解决方案是:
require 'yaml'
source = <<SOURCE
# hostname or IP address of client
client: host4.example.com
# hostname or IP address of server
server: 192.168.222.222
SOURCE
conf = YAML::load(source)
puts source
Run Code Online (Sandbox Code Playgroud)
对我来说,好处是无需重复任何操作(例如,“ client:”仅指定一次),数据和注释在一起,可以将源输出为YAML,并且可以使用数据结构(在conf中可用)。使用。
如何使用ruby to_yaml方法存储带有原始符号的utf8字符串而不是转义序列?