我的控制器中有以下代码:
@nav_items = ActiveSupport::OrderedHash.new
@nav_items[:home] = Struct::NavItem.new("Home", nil, "/", "icon-home")
@nav_items[:about] = Struct::NavItem.new("About", nil, "/about", "icon-heart")
@nav_items[:contact] = Struct::NavItem.new("Contact", nil, "/contact", "icon-envelope")
if (current_user != nil && current_user.admin?)
@nav_items[:admin_divider] = Struct::NavItem.new(nil, "divider-vertical", nil, nil)
@nav_items[:admin] = Struct::NavItem.new("Admin", nil, "/admin", "")
end
我认为以下内容:
- @nav_items.each do |nav_item|
%li{ :class => nav_item[:class] }
%a{ :href => nav_item[:link] }= nav_item[:text]
我的结构定义:Struct.new("NavItem", :text, :class, :link, :icon_class)
我对Ruby,Rails和HAML比较陌生,但在另一个使用ERB渲染的项目中,像这样的代码运行良好。我也尝试通过执行类似nav_item.link
的操作来引用属性,但这仍然不起作用。
我使用当前代码得到的错误是:
符号作为数组索引
使用nav_item.link
之类的代码:
#<的未定义方法`link'数组:0x126970ff0>
由于这是我第一次使用HAML,我不太清楚我做错了什么。
答案 0 :(得分:0)
看起来您使用单个变量@nav_items
迭代了|nav_item|
哈希,这将产生键值对作为数组。试试-@nav_items.each do |_,nav_item|
或-@nav_items.values.each do |nav_item|
。