2014-07-21 81 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

是的,我已經做到了,但沒有幫助我 –