2013-11-15 68 views
1

数组所以我有这个permissionrank.yaml文件:转换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 

有什么办法来此加载到哈希的阵列所以它会适合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的种子文件要求的格式。

回答

3

在您的例子,它从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"}] 
+0

谢谢,当我回到我的电脑时,我会尝试这个。 –

+0

谢谢,就像你说的那样。我已经添加了一个代码示例,我测试了您的帖子的完整性,您是否可以接受它,以便我可以接受您的答案? :) –

+0

恐怕我还没有达到中庸状态,但我确信主持人很快就会来。 –