【问题标题】:undefined method `each' for nil:NilClass in SpreeSpree 中 nil:NilClass 的未定义方法“each”
【发布时间】:2023-08-01 17:21:01
【问题描述】:

在 Spree Store 中,我有一个由分类法组成的侧栏。 例子: 食品(分类) |-汉堡包 |-炸薯条

我使用分类法制作的侧栏,并应用代码构建自定义引导菜单。为此,我执行了以下操作:

我从 _taxonomies.html.rb 中获取了下面的代码:

<% max_level = Spree::Config[:max_level_in_taxons_menu] || 1 %>
<nav id="taxonomies" class="sidebar-item" data-hook>
  <% @taxonomies.each do |taxonomy| %>
    <% cache [I18n.locale, taxonomy, max_level] do %>
      <h6 class='taxonomy-root'><%= Spree.t(:shop_by_taxonomy, :taxonomy => taxonomy.name) %></h6>
      <%= taxons_tree(taxonomy.root, @taxon, max_level) %>
    <% end %>
  <% end %>
</nav>

我做到了:(将其放入 _main_bar_menu.html.rb 文件中)

<% max_level = Spree::Config[:max_level_in_taxons_menu] || 1 %>
<nav class="columns sixteen">
<nav id="taxonomies" class="navbar navbar-default" data-hook>
    <div class="container-fluid">
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" 
            data-target="#menu-produtos-taxonomi" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
        </div>
        <div class="collapse navbar-collapse" id="menu-produtos-taxonomi">
            <ul class="nav navbar-nav">
                <li id="home-link" data-hook><%= link_to Spree.t(:home), spree.root_path %></li>    
                <% @taxonomies.each do |taxonomy| %>
                    <% cache [I18n.locale, taxonomy, max_level] do %>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" 
                            aria-haspopup="true" aria-expanded="false">
                            <%= Spree.t(:shop_by_taxonomy_only_name, :taxonomy => taxonomy.name) %> 
                            <span class="caret"></span>
                        </a>
                        <%= taxons_tree_menu(taxonomy.root, @taxon, max_level) %>
                    </li>
                    <% end %>
                <% end %>   
            </ul>
        </div>
    </div>
</nav>
</nav>

之后,每次我尝试访问带有详细信息的产品页面(不是同时列出产品的页面)时,例如:

http://localhost:3000/products/soy-milk?taxon_id=3

我收到以下错误:

nil:NilClass 的未定义方法 `each'

它指向 _main_bar_menu.html.rb 中的那一行(如上所示):

<% @taxonomies.each do |taxonomy| %>

我是 Ruby on Rails 和 Spree 的初学者,但我不知道如何解决这个问题。如果你能帮助我,请......我将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4 spree


    【解决方案1】:

    请将此行写为 它永远不会产生 nil 的错误

    【讨论】:

      【解决方案2】:

      看起来@taxonomies 集合未分配到 spree 产品展示操作中。您复制到视图中的代码需要分配分类单元。尝试查看和比较控制器的索引并显示操作,因为索引操作正在分配分类单元

      【讨论】:

        【解决方案3】:

        您正在尝试在空集合中进行迭代。您在哪里向@taxonomies 变量提供数据?那个系列应该包含什么?也许您正在执行的查询没有返回任何值,因此集合为空。检查你的控制器。

        【讨论】:

        • 收藏不是空的,那里什么都没有?
        • 这很奇怪,因为当我使用 _taxonomies.html.rb 文件时我没有任何问题。只有当我使用它的代码在 _main_bar_menu.html.rb 中制作我自己的栏菜单时才会发生这种情况。