Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 用户中的NoMethodError::会话新建_Ruby On Rails_Ruby_Devise - Fatal编程技术网

Ruby on rails 用户中的NoMethodError::会话新建

Ruby on rails 用户中的NoMethodError::会话新建,ruby-on-rails,ruby,devise,Ruby On Rails,Ruby,Devise,我是ROR的新开发人员。我使用Desive身份验证进行登录或注册,效果很好,但当我在app/views/layouts/application.html.erb中从数据库中选择datacategory或sub_category时,我会出现如下错误: NoMethodError in Users::Sessions#new Showing C:/railsapp/facepro/app/views/layouts/application.html.erb where line #28 raise

我是ROR的新开发人员。我使用Desive身份验证进行登录或注册,效果很好,但当我在app/views/layouts/application.html.erb中从数据库中选择datacategory或sub_category时,我会出现如下错误:

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"> 

请帮帮我

我猜您还没有在SessionNew中定义@categories

在SessionController中,您将需要以下内容:

def new
  @categories = Category.all
  ...
end

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

-

设计

你问题的核心与设计无关

您可以在错误本身中找到线索:

Showing C:/railsapp/facepro/app/views/layouts/application.html.erb where line #28
Desive与应用程序布局完全没有关系——它只是用于用户身份验证。要解决这个问题,您需要确保在每次加载应用程序布局时都定义了@categories变量

-

应用控制器

为此,您需要在每次加载控制器操作时声明该变量。由于每个控制器都应该从应用程序控制器继承,因此执行此操作的方法是在app/controllers/application\u controller.rb文件中使用before\u操作回调:


当我创建designe身份验证时,它不会创建sessioncontroller。所以在controller中我创建文件sessions_controller.rb并添加def new@categories=Category.all。。。结束,但它仍然是错误的任务控制器来设计。这可能会帮助您:@categories.each在您的应用程序中被调用。html.erb?是的,在我的应用程序中。html.erb我选择如下所示:
#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
    before_action :set_categories

    private

    def set_categories
        @categories = Category.all
    end
end