【问题标题】:Convert YAML into an array of hashes将 YAML 转换为哈希数组
【发布时间】:2013-11-28 22:29:40
【问题描述】:

所以我有这个permissionrank.yaml 文件:

player:
  id: 1
  label: Player
  badge: NIL

bronze helper:
  id: 2
  label: Bronze Helper
  badge: STF_HELP_BRZ

silver helper:
  id: 3
  label: Silver Helper
  badge: STF_HELP_SLV

有没有办法将它加载到散列的 array 中,使其适合 Rails 的 seeds.rb 文件的相同格式?它应该输出:

[
  {id: 1, label: "Player",                badge: "NIL"        },
  {id: 2, label: "Bronze Helper",         badge: "STF_HLP_BRZ"},
  {id: 3, label: "Silver Helper",         badge: "STF_HLP_SLV"},
]

这就是 Rails 的种子文件要求的格式。

【问题讨论】:

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


    【解决方案1】:

    在您的示例中,它从 YAML 加载,例如:

    {"player"=>{"id"=>1, "label"=>"Player", "badge"=>"NIL"},
     "bronze helper"=>{"id"=>2, "label"=>"Bronze Helper", "badge"=>"STF_HELP_BRZ"},
     "silver helper"=>{"id"=>3, "label"=>"Silver Helper", "badge"=>"STF_HELP_SLV"}}
    

    因此,您似乎真正需要摆脱的只是散列键。如果您只想保留哈希值,可以使用Hash#values 方法获取(几乎)您想要的数组:

    pp YAML.load_file("permissionrank.yml").values
    
    [{"id"=>1, "label"=>"Player", "badge"=>"NIL"},
     {"id"=>2, "label"=>"Bronze Helper", "badge"=>"STF_HELP_BRZ"},
     {"id"=>3, "label"=>"Silver Helper", "badge"=>"STF_HELP_SLV"}]
    

    与您的示例唯一剩下的区别是,这些哈希中的键是字符串,而不是符号。这可能无关紧要,因为 Rails 通常对此很放松,但只是为了举例,让我们也转换它们。为此,您可以使用 ActiveSupport 的 Hash#symbolize_keys 方法。

    pp YAML.load_file("permissionrank.yml").values.map(&:symbolize_keys)
    
    [{id: 1, label: "Player", badge: "NIL"},
     {id: 2, label: "Bronze Helper", badge: "STF_HELP_BRZ"},
     {id: 3, label: "Silver Helper", badge: "STF_HELP_SLV"}]
    

    【讨论】:

    • 谢谢,等我回到我的电脑上试试这个。
    • 谢谢,正如你所说。我已经添加了一个代码示例,我在您的帖子中进行了完整性测试,您能否接受它以便我可以接受您的回答? :)
    • 我恐怕还没有达到审核状态,但我相信很快就会有审核人。
    • 或许不是。 @Guilmon 我自己添加了一些示例代码,可以吗?
    • 我起初尝试了你的例子,但它没有按我的预期工作。但是YAML.load_file("#{Rails.root}/path/to/file.yml").values.each { |hash| hash.symbolize_keys! } 工作得很好。
    【解决方案2】:

    下面会给你一个哈希数组:

    -
      :id: 1
      :label: Player
      :badge: NIL
    -
      :id: 2
      :label: Bronze Helper
      :badge: STF_HELP_BRZ
    -
      :id: 3
      :label: Silver Helper
      :badge: STF_HELP_SLV
    

    【讨论】:

      猜你喜欢
      • 2013-07-08
      • 2019-10-27
      • 2019-05-23
      • 2012-10-29
      • 2014-04-30
      • 1970-01-01
      • 1970-01-01
      • 2020-01-26
      • 2010-12-11
      相关资源
      最近更新 更多