4

Вопрос по ruby-on-rails, ruby, devise, ruby-on-rails-4 – Разработать после первого входа в редирект

Обычноafter_sign_up_path будет работать, но теперь, когда у меня естьconfirmationsэто идет в корзину.

Я ищу способ перенаправить пользователя на егоFIRST SIGN IN, означающий, что

sign_in_count == 0

last_sign_in == ноль

так что я добавил к своемуapplications_controller.rb

def after_sign_in_path_for(user)
  if current_user.sign_in_count == 0
    welcome_path
  end
end

ноконечно это не сработало. Что мне не хватает?

Да, мы поняли это :)

от Mini John

Я думаю, что после входа станет 1 не 0

от Hardik Joshi

Это мысль, это не работает ...

от Mini John

Я должен работать с пользователем, который собирается войти первым, но не с другим пользователем, который уже вошел ранее. Вы должны дать еще блок для если.

от sunil
4 ответа
17

После тестирования мы обнаружили

что Devise устанавливает значениеsign_in_count сразу после входа в систему, это означает, что он никогда не будет0, это будет1 для первого входа в систему:

#config/routes.rb
devise_for :users, controllers: { sessions: "sessions" }

#app/controllers/sessions_controller.rb
class SessionController < Devise::DeviseController

    def after_sign_in_path_for(resource)
        if resource.sign_in_count == 1
           welcome_path
        else
           root_path
        end
    end

end

это может быть => класс Devise :: SessionsController <DeviseController? потому что то, что ты написал, выдает мне ошибку ..

от Mini John

Я думаю, что это должно быть так:Class SessionsController < Devise::SessionsController

от Richard Peck

После подтверждения записи 0 и ноль (отлично). ошибка ->i.imgur.com/DN4QaVV.png

от Mini John

Вы должны включитьresource.sign_in_count

от Richard Peck
0

Пользователь &quot

пользователь" вместо current_user.

def after_sign_in_path_for(user)
  if user.sign_in_count == 0
    welcome_path
  end
end

Я попробовал это, но он перенаправляет меня на current_user вместо welcome_path

от Mini John
0

Вы передали &#39

user' как переменную, тогда вы должны использовать ее. И дайте еще блок также, потому что вы переопределяете этот метод, тогда как насчет другого, уже вошедшего в систему пользователя.

def after_sign_in_path_for(user)
  if current_user.sign_in_count == 0
    welcome_path
  else
    #root_path
  end
end

Пробовал уже :(

от Mini John
0

В ApplicationController (без разработки контроллера сессий)

используя Ruby 2.5.1 и RoR 5.1.6

def after_sign_in_path_for(user)
  if user.sign_in_count == 1
    first_test_path #see note below
  else
    second_test_path
  end
end

Я направляю пользователей наedit_user_path при первом входе - заменаfirst_test_path - с:

edit_user_path(current_user)

Похожие вопросы