неопределенный метод `user_signed_in? ' для ApplicationController: класс, разработка - PullRequest
2 голосов
/ 29 ноября 2011

Следующий код:

class ApplicationController < ActionController::Base
  protect_from_forgery

  if user_signed_in?
  end
end

дает эту ошибку:

undefined method `user_signed_in?' for ApplicationController:Class, Devise

Я посмотрел на эту запись , но я не знаю, что он имеет в видуэкземпляр контроллера приложения в сравнении с определением контроллера приложения.У меня есть devise_for: пользователи, настроенные в файле config / rout.rb, я не использую clear_helpers и имею: database_authenticatable в моем файле user.rb.Это если оператор работает нормально, если он находится в действии в другом контроллере.Почему это не работает здесь?Нужно ли как-то передать помощника по разработке?

1 Ответ

2 голосов
/ 29 ноября 2011

Он говорит, что вызывайте функцию, используя само определение класса контроллера, а не экземпляр класса контроллера. В коде self == ApplicationController он сравнивает self со ссылкой на определение класса ApplicationController, а не с конкретным экземпляром (или объектом) ApplicationController.

В этом случае пост фактически говорит о вызове функции debugger в методе контроллера, а не просто где-то в определении контроллера.

Как упоминается в посте, вы должны звонить user_signed_in? в контексте экземпляра , а не определения. Поэтому поместите это в метод, который будет использоваться для фильтра перед или что-то в этом роде. Например:

class ApplicationController < ActionController::Base
  protect_from_forgery

  def find_user_name
     if user_signed_in?
        return user.user_name
     end
  end

end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...