我是ROR的新开发人员。我为sign_in或sign_up使用了devise身份验证,它工作得很好,但是当我从app/views/layouts/application.html.erb数据库中选择数据(类别或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"> 请帮帮我!
发布于 2014-07-21 07:41:01
接受的答案不应该被接受--它不能解决问题的核心。
--
设计
你问题的核心与设计无关。
你的线索就在于错误本身:
Showing C:/railsapp/facepro/app/views/layouts/application.html.erb where line #28Devise对application layout没有任何影响--它只用于用户身份验证。要解决这个问题,您需要确保每次加载应用程序布局时都要定义@categories变量。
--
ApplicationController
要做到这一点,您需要在每次加载控制器操作时声明该变量。由于每个控制器都应该从application控制器继承,实现此目的的方法是在app/controllers/application_controller.rb文件中使用before_action回调:
#app/controllers/application_controller.rb
Class ApplicationController < ActionController::Base
before_action :set_categories
private
def set_categories
@categories = Category.all
end
end发布于 2014-07-21 04:53:58
您可能还没有在@categories中定义Sessions#new。
在SessionsController中,您需要这样的东西:
def new
@categories = Category.all
...
endhttps://stackoverflow.com/questions/24857832
复制相似问题