如何将符号转换为字符串(即带状开头:) ruby​​ to_yaml

时间:2019-01-11 10:38:02

标签: ruby-on-rails ruby ruby-on-rails-4 yaml

我正在尝试从我的YAML输出中删除前导:。这是代码,以及我在下面所做的事情:

model / attribution_channel.rb

DEFAULT_BONUS_CONFIG =  {
  sign_up: {
    currency: 'ngn',
    type: 'flat',
    amount: 1000
  },
  visit: {
    currency: 'ngn',
    type: 'flat',
    amount: 5
  }
}

view / form.slim.html

AttributionChannel::DEFAULT_BONUS_CONFIG.to_yaml

输出:

Output

要从输出中删除键中的 YAML分隔符--- Leading:,这是我所做的:

AttributionChannel::DEFAULT_BONUS_CONFIG.to_yaml.gsub("---\n", '').sub(":", '')

..但.sub(":", '')部分仅删除了第一个前导:的{​​{1}}。

如何从YAML输出中删除前导:?任何帮助表示赞赏吗?这是我想要的以下内容:

:

2 个答案:

答案 0 :(得分:3)

您需要使用键作为字符串来跳过:生成

require 'active_support/core_ext/hash/keys'
require 'yaml'

DEFAULT_BONUS_CONFIG.deep_stringify_keys.to_yaml.gsub("---\n", '')

 => "sign_up:\n  currency: ngn\n  type: flat\n  amount: 1000\nvisit:\n  currency: ngn\n  type: flat\n  amount: 5\n"

答案 1 :(得分:2)

您可以在生成YAML之前将哈希键转换为字符串。下面的代码经过一个哈希,将每个键递归地转换为哈希,如果是哈希,则对每个值进行字符串化处理(请注意,它没有为哈希中的循环依赖做好准备)。

def stringify(hash)
  hash.map{|k, v| [k.to_s, v.is_a?(Hash) ? stringify(v) : v] }.to_h
end  

puts stringify(DEFAULT_BONUS_CONFIG).to_yaml

---
sign_up:
  currency: ngn
  type: flat
  amount: 1000
visit:
  currency: ngn
  type: flat
  amount: 5

编辑:关于开头的---,请参见this answer