来自assoc数组的Ruby / yaml delete元素

时间:2015-10-17 23:50:29

标签: arrays ruby yaml associative-array

嘿伙计们我在yml中有数组

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

我有菜单(我创建了变量菜单,因为当我只使用print ...元素[' text'] ...我从php得到类似var_dump的文字"开始")我想删除' name'在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

我的错误是

  

在解析块映射时找不到预期的键...

所以函数删除在这里不起作用,我的问题是,如何删除&#34; name&#34;这个数组中的元素?为什么呢 print "<li><a href=\"#{element['addr']}\">#{element['text']}</a></li>"不起作用? 感谢您的帮助: - )

1 个答案:

答案 0 :(得分: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构建器也应按以下方式工作:

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