Я использую Devise и Omniauth. Итак, я должен иметь метод current_user
, доступный в моих контроллерах. Действительно, например, в моем tasks_controller
:Devise current_user найден в контроллере, но отсутствует в другом
def index
@tasks_remaining = Task.where(:user => current_user, :done => false)
@tasks_done = Task.where(:user => current_user, :done => true)
end
current_user
делает работу, как и ожидалось. Очень странно, RubyMine предупреждает меня, что current_user
не найден и подчеркивает его серый. Но эта часть кода работает в любом случае.
Однако в моем authentications_controller
,
def create
omniauth = request.env["omniauth.auth"]
authentication = Authentication.find_by_provider_and_uid(omniauth['provider'], omniauth['uid'])
if authentication
sign_in_and_redirect(:user, authentication.user)
else
current_user.authentications.create(:provider => ominauth['provider'], :uid => omniauth['uid'])
flash[:notice] = "success"
redirect_to authentication_url
end
end
Здесь я получаю сообщение об ошибке, когда эта линия с current_user
выполняет. Он говорит:
undefined method `authentications' for nil:NilClass
Я отлажена до этой точки, и обнаружил, что current_user
переменная действительно нет в этой области.
Итак, почему он работает в одном контроллере и отсутствует в другом? Я использую Rails 4 и рубин 2. Я следую Railscast 235 и 236.
убедитесь, что вы используете 'authenticate_user!' В 'before_filter' на вашем контроллере. – manoj2411