Ruby on rails 用户中的NoMethodError::会话新建
我是ROR的新开发人员。我使用Desive身份验证进行登录或注册,效果很好,但当我在app/views/layouts/application.html.erb中从数据库中选择datacategory或sub_category时,我会出现如下错误: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
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