首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NoMethodError in Users::Sessions#new

NoMethodError in Users::Sessions#new
EN

Stack Overflow用户
提问于 2014-07-21 04:37:21
回答 2查看 1.3K关注 0票数 1

我是ROR的新开发人员。我为sign_insign_up使用了devise身份验证,它工作得很好,但是当我从app/views/layouts/application.html.erb数据库中选择数据(类别或sub_category)时,我会得到一些错误,如下所示:

代码语言:javascript
复制
NoMethodError in Users::Sessions#new

Showing C:/railsapp/facepro/app/views/layouts/application.html.erb where line #28 raised:

undefined method `each' for nil:NilClass

Extracted source (around line #28):    

 <% @categories.each do |category| %>
    <li><a href="#"><%= category.category_name %></a>
       <ul class="dropdown-menu"> 

请帮帮我!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-21 07:41:01

接受的答案不应该被接受--它不能解决问题的核心。

--

设计

你问题的核心与设计无关。

你的线索就在于错误本身:

代码语言:javascript
复制
Showing C:/railsapp/facepro/app/views/layouts/application.html.erb where line #28

Devise对application layout没有任何影响--它只用于用户身份验证。要解决这个问题,您需要确保每次加载应用程序布局时都要定义@categories变量

--

ApplicationController

要做到这一点,您需要在每次加载控制器操作时声明该变量。由于每个控制器都应该从application控制器继承,实现此目的的方法是在app/controllers/application_controller.rb文件中使用before_action回调:

代码语言:javascript
复制
#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
    before_action :set_categories

    private

    def set_categories
        @categories = Category.all
    end
end
票数 1
EN

Stack Overflow用户

发布于 2014-07-21 04:53:58

您可能还没有在@categories中定义Sessions#new

SessionsController中,您需要这样的东西:

代码语言:javascript
复制
def new
  @categories = Category.all
  ...
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24857832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档