0

我的控制器中有以下代码:

@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

#< Array:0x126970ff0 > 的未定义方法“链接”

由于这是我第一次使用 HAML,我不太确定自己做错了什么。

4

1 回答 1

0

看起来您有一个@nav_items使用单个变量迭代的哈希|nav_item|,这将产生键值对作为数组。尝试-@nav_items.each do |_,nav_item|-@nav_items.values.each do |nav_item|

于 2012-10-24T04:57:00.537 回答