2015-10-17 72 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