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>の未定義のメソッド `link'

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 に答える