2011-04-25 45 views
1

我試圖加載應用程序配置YAML - 風格一棵樹,我想遍歷:穿越YAML的Rails應用程序配置

 
style: 
    name: Retro 
style: 
    name: Nouveau 
style: 
    name: Plain 

我加載此使用以下初始化:

 
STYLES = YAML.load_file("#{RAILS_ROOT}/config/styles.yml") 

我希望能夠使用STYLES [:style] .each或某些類似的函數來遍歷每個樣式。這是失敗的,STYLES只會返回列出的最後一個。我真的不想使用xml(因爲它很醜陋)...有沒有一種方法使這個工作與yaml?

如果不是,我將不勝感激任何建議。

回答

2

yaml樣式樹不是你想要的樣子;您需要重新構造它以支持具有不同名稱的多個樣式。

Retro: 
    type: style 
Nouvaeu: 
    type: style 
Plain: 
    type: style 

將每個塊視爲新對象。現在你可以使用它們:

plain_style = YAML.load_file("#{RAILS_ROOT}/config/styles.yml")['Plain'] 
plain_style['type'] >>> "style" 
+0

多感謝,我將嘗試這個:) – 2011-04-25 13:15:20

0

這是一個比喬納森的(在其他方面是正確的)更部分的答案。

Yaml格式更像json而不是xml。 Yaml和json被設計成簡單表示大多數語言中普遍使用的基本但常用的數據結構(並且在腳本語言中普遍存在)。 Xml被設計爲一種標記語言和一個元數據規範,它具有大量的功能來促進不同文檔類型的混合。

Yaml中最基本和最常用的容器是序列和地圖。在編程語言中,序列通常被稱爲列表或數組,而映射通常被稱爲字典,哈希,hashmaps或數組(這很奇怪;我在看你PHP)。

所以,你的文檔就相當於YAML/JSON(有效期爲兩種類型)文件:

{"style": {"name": "Retro"}, "style": {"name": "Nouveau"}, "style": {"name": "Plain"}} 

我你知道JSON或{}風格的地圖是相當容易,看看有什麼問題的任何語言是。書面方式這是紅寶石將是:

{"style" => ..., "style" => ..., "style" => ...} 

最後一個鍵/值對覆蓋以前的,他們以前是不可能得到的。因此您需要更改文檔格式。

建議1周

喬納森·朱利安的建議是相當不錯的:

Retro: 
    type: style 
Nouvaeu: 
    type: style 
Plain: 
    type: style 

建議2

我可能會使用類似:

styles: 
    Retro: 
    Nouvaeu: 
    Plain: 

或者乾脆離開 「樣式」如果它被上下文所暗示,那麼它就完全沒有了。

建議3

又如即更像XML是使用!!對

!!pair 
- style: 
    name: Retro 
- style: 
    name: Nouveau 
- style: 
    name: Plain 

這更多或更少的(取決於解析器/語言),相當於該數據結構:

[("style", {"name": "Retro"}), 
("style", {"name": "Nouveau"}), 
("style", {"name": "Plain"})]