2016-08-09 3 views
0

Я не могу сделать голову или хвост этого (но я, вероятно, идиот). У меня есть класс ApplicationController, содержащий следующий метод:Неопределенный метод logged_in? Ruby on Rails

def logged_in? 
    !current_user.nil? 
end 

if logged_in? 
    load_and_authorize_resource :unless => :devise_controller?, :except => :show 
end 

Это дает мне ошибку:

undefined method `logged_in?' for ApplicationController:Class

Этот метод четко определен, как он возвращается как неопределенные?

+0

Если вы вызываете его на верхнем уровне (что вы делаете сразу после его определения) вы вызываете его на уровне класса, а не на уровне экземпляра. Вы определили метод экземпляра; он недоступен вне экземпляра. –

+0

Итак, у вас есть класс ApplicationController, и у вас есть эти 6 строк кода? Правильно, как вы их разместили? Я имею в виду, «если logged_in?» строка появляется после «конца» «def logged_in?» Метод ?. Если это так, вы делаете это неправильно. «Если logged_in?» код должен использоваться внутри ваших методов, а не снаружи. Вы используете код вне методов, чтобы сделать, возможно, какое-то метапрограммирование, чтобы определить другие методы и т. Д. – fanta

+0

@ 123 У вас все еще есть эта проблема? У меня была аналогичная проблема, которую я решил сегодня –

ответ

0

Возможно, лучшее место для объявления в /helpers/application_helper.rb вместо application_controller.

Кроме того, чтобы проверить, включен ли пользователь, программа Devise предоставляет следующий помощник user_signed_in?.

Источник: https://github.com/plataformatec/devise

Смежные вопросы