2013-11-15 72 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

恐怕我還沒有達到中庸狀態,但我確信主持人很快就會來。 –