2014-07-21 53 views
1

我是的新开发者ROR。我使用的设计认证为sign_insign_up,它工作得很好,但是当我在app/views/layouts/application.html.erb数据库选择数据(类别或sub_category)我得到了一些错误,如波纹管:用户中的NoMethodError ::会话#new

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

请帮我!

回答

0

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

-

设计

你的问题的核心有什么做设计。

您的线索是在错误本身:

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

设计具有绝对的applicationlayout没有关系 - 这是仅适用于用户身份验证。为了解决这个问题,你需要确保你定义的每一个时间@categories变量加载应用程序布局

-

的ApplicationController

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

#app/controllers/application_controller.rb 
Class ApplicationController < ActionController::Base 
    before_action :set_categories 

    private 

    def set_categories 
     @categories = Category.all 
    end 
end 
+1

非常感谢你,现在它工作。它是非常好的答案 –

0

去猜测你还没有定义@categoriesSessions#new

SessionsController你需要这样的事情:

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

当我创建设计验证它不是。所以在控制器创建SessionsController我创建文件sessions_controller.rb并添加def新 @categories = Category.all ... 结束但它仍然错误 –

+0

'SessionsController'自带Devise。这可能会帮助你:http://stackoverflow.com/questions/13836139/rails-how-to-override-devise-sessionscontroller-to-perform-specific-tasks-当 –

+0

是的,我已经做到了,但没有帮助我 –