2015-10-17 150 views
-1

嗨,我有數組中的陽明紅寶石/ YAML從assoc命令數組中刪除元素

menu: 
     primary: 
     name: General menu 
     - 
      text: Home 
      addr: index.html 
     - 
      text: Contact 
      addr: contact.html 

,我有菜單(我創建的變量菜單,因爲當我使用只是打印...元素[「文本」] ......我得到的東西像PHP中沒有純文本「開始」的var_dump)我想​​刪除的foreach之前「名」元素,但它不工作:

name = $data['name'][name]['name'] # i need this variable later 
$data['menu'][name].delete('name') # it doesnt work 
menu = "<ul>" 
$data['menu'][name].each do |element| 
    menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>" 
end 
menu << "</ul>" 
print menu 

我的錯誤是

沒有找到預期的關鍵,而解析塊映射在...

so function delete doesnt work here,my question is,how to delete「name」element from this array?爲什麼 print "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"不起作用? 感謝您的幫助:-)

+0

甌我發現了一個很大的錯誤,我的變種名稱「名稱」,這會覆蓋我以前的變量:name ='primary'。這是一個愚蠢的錯誤。但我仍然不知道爲什麼不工作只是打印「

  • [...]
  • 」,我必須使用變量 – Jeremy

    回答

    0

    您的YAML無效,因爲該數組必須與某個鍵相關聯。你可能想要使用類似的東西:

    menu: 
        primary: 
        name: General menu 
        items: 
         - 
         text: Home 
         addr: index.html 
         - 
         text: Contact 
         addr: contact.html 
    

    此外,請擺脫前綴變量$的PHP的做法。在ruby中,這使得變量是全局的,應該儘可能地避免它們。

    下面舉例說明你想要的操作:

    data = YAML.load <<YAML 
    menu: 
        primary: 
        name: General menu 
        items: 
         - 
         text: Home 
         addr: index.html 
         - 
         text: Contact 
         addr: contact.html 
    YAML   
    

    => data 
    {"menu"=>{"primary"=>{"name"=>"General menu", "items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}} 
    => data['menu']['primary'].delete('name') 
    "General menu" 
    => data 
    {"menu"=>{"primary"=>{"items"=>[{"text"=>"Home", "addr"=>"index.html"}, {"text"=>"Contact", "addr"=>"contact.html"}]}}} 
    

    你的HTML Builder還應該爲工作如下:

    menu = "<ul>" 
    data['menu']['primary']['items'].each do |element| 
        menu << "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>" 
    end 
    menu << "</ul>" 
    
    +0

    請在第一篇文章中閱讀我的評論。我知道前綴$ make全局變量,並且這是全局變量,並且此代碼在函數中。我知道,我覆蓋了我以前的變量「名稱」,以及爲什麼它不起作用。感謝您的幫助:)你知道我怎麼能打印元素沒有使用變量? – Jeremy