学生#类别中的NoMethodError

时间:2015-05-15 10:38:27

标签: ruby-on-rails

显示第4行引发的/home/ns/school/app/views/student/_student_category_list.erb

  

未定义的方法`每个'为零:NilClass

<ul id="category-list">


            <% @student_categories.each do |c| %>

                <li class="list<%=cycle('odd', 'even')%>">
                    <div class="category-name"><%= c.name %></div>
                    <div class="category-edit"><%= link_to "#{t('edit_text')}", :url => { :action => 'category_edit', :id => c.id } %> 
                    </div>
                    <div class="category-delete"><%= link_to  "#{t('delete_text')}", :url => { :action => 'category_delete', :id => c.id } , :confirm =>"#{t('delete_confirm_msg')}"%>
                    </div>
                </li>
            <% end %>

    </ul>

2 个答案:

答案 0 :(得分:1)

基本上,每个人都需要查看您的控制器代码,因为他们希望确保实例变量@student_categories包含数据的哈希值。

但是,我们都可以推断@student_categories是:

  1. 根本没有在控制器中初始化,这会导致您的错误。
  2. 未在正确的控制器操作中初始化。
  3. 在您的代码中某处错过了@ student_category / @ student_categories(导轨复数化最初会让人感到困惑。)
  4. 解决方案:

    • 检查您的模型是否命名为 student_category.rb student.rb
    • 检查您的控制器是否已命名为 student_categories_controller.rb students.rb

    由于您列出了所有类别,我将假设您的索引操作中找到了@student_categories变量,位于 student_categories_controller.rb 中。这将是student_category_list行动。

    适当调整。

    class StudentCategoriesController < ApplicationController
      def student_categories_list
        # Some Action  
      end
    end
    

    您的控制器中应该有一个索引操作,如下所示:

    def index
      @student_categories = StudentCategory.all # Not good for production
    end
    

    或许,它看起来像这样:

    def index
      @student_category = StudentCategory.all # Not good for production
    end
    

    也许它看起来像这样:

    def index
      @student_categories = Student.all # Not good for production
    end
    

    使用您的模型,视图和控制器代码,我们可以为您提供精确的解决方案,但99%的情况下,这是多元化的问题。 Rails有一些命名conventions you should look at.

    另外,请小心在生产中使用Model.all,因为模型中可能有数万条记录。

答案 1 :(得分:0)

这意味着@student_categories未初始化或具有零值。请查看控制器以确保初始化已完成。