2012-10-24 23 views
0

我在我的控制器下面的代碼:不能調用從HAML結構屬性文件

@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

未定義的方法'鏈接」的#<陣列:0x126970ff0>

由於這是我第一次使用HAML,我不太確定我做錯了什麼。

回答

0

看起來好像你有一個@nav_items散列迭代單變量|nav_item|,這將產生鍵值對作爲一個數組。嘗試[email protected]_items.each do |_,nav_item|[email protected]_items.values.each do |nav_item|

+0

嘿嘿!就這樣,魔術。我仍然在摸索着爲什麼使用ERB渲染('<%@ x.each do | y |%>'),但這樣做現在變得更有意義了。非常感謝你! – Lander