2015-03-01 5 views
0

Что нам нужно, чтобы положить в контроллер приложения, чтобы сделать метод set_top_3_goals, когда пользователь не вошел в систему, или если их еще нет в шагах?Как исправить ошибку неопределенного метода в application_controller?

Потому что я получаю эту ошибку:

NoMethodError (undefined method `goals' for nil:NilClass): 
    app/controllers/application_controller.rb:7:in `set_top_3_goals' 

Мой код контроллера:

class ApplicationController < ActionController::Base 
    before_action :set_top_3_goals 
    protect_from_forgery with: :exception 
    include SessionsHelper 

    def set_top_3_goals 
    @top_3_goals = current_user.goals.unaccomplished.top_3 
    end 

    private 

    # Confirms a logged-in user. 
    def logged_in_user 
     unless logged_in? 
     store_location 
     flash[:danger] = "Please log in." 
     redirect_to login_url 
     end 
    end 
end 

ответ

1

Я бы добавить before_action с методом logged_in_user на контроллере, до другого before_action вызова:

class ApplicationController < ActionController::Base 
    before_action :logged_in_user 
    before_action :set_top_3_goals 
end 

Обратите внимание, что порядок ведения заказов здесь.