Созданы ли автоматические генераторы? Как вы к ним обращаетесь?
Я знаю, что вы делаете
rails generate devise_views
.
Созданы ли автоматические генераторы? Как вы к ним обращаетесь?
Я знаю, что вы делаете
rails generate devise_views
.
В Devise используются внутренние контроллеры, к которым вы можете получить доступ и подкласс в своем собственном коде. Они находятся под модулем Devise
. Например, чтобы расширить RegistrationsController
:
class MembershipsController < Devise::RegistrationsController
# ...
end
Затем все, что вам нужно сделать, это настроить маршруты Devise вместо использования вашего контроллера:
devise_for :members, :controllers => { :registrations => 'memberships' }
В предположении, что вы хотите видеть эти контроллеры для их изменения или переопределения, Devise теперь предоставляет простой генератор, который воссоздает свои контроллеры в вашем приложении, чтобы сделать это проще. По документации (которая будет самой последней):
1) Создайте свои пользовательские контроллеры, используя генератор, для которого требуется область действия:
Приставки
rails generate devise:controllers [scope]
Если вы укажете users
в качестве области действия, контроллеры будут созданы в app/controllers/users/
. Контроллер сессий будет выглядеть следующим образом:
class Users::SessionsController < Devise::SessionsController
# GET /resource/sign_in
# def new
# super
# end
...
end
2) Скажите маршрутизатору использовать этот контроллер:
devise_for :users, controllers: { sessions: "users/sessions" }
3) Скопируйте представления из devise/sessions
в users/sessions
. Поскольку контроллер был изменен, он не будет использовать представления по умолчанию, расположенные в devise/sessions
.
4) Наконец, измените или увеличьте требуемые действия контроллера.
Вы можете полностью переопределить действие контроллера:
class Users::SessionsController < Devise::SessionsController
def create
# custom sign-in code
end
end
Или вы можете просто добавить к нему новое поведение:
class Users::SessionsController < Devise::SessionsController
def create
super do |resource|
BackgroundWorker.trigger(resource)
end
end
end
Это полезно для запуска фоновых заданий или регистрации событий во время определенных действий.
Помните, что Devise использует флэш-сообщения, чтобы пользователи знали, что вход был успешным или неудачным. Программа Devise ожидает, что ваше приложение будет называть flash[:notice]
и flash[:alert]
соответствующим образом. Не печатайте всю флэш-хэш, печатайте только определенные клавиши. В некоторых случаях Devise добавляет ключ :timedout
к хэшу Flash, который не предназначен для отображения. Удалите этот ключ из хэша, если вы намереваетесь распечатать весь хэш.
$ rails generate devise:controllers SCOPE [options]
Параметры: -c, [--controllers = один два три]
Используйте -c, чтобы указать, какой контроллер вы хотите перезаписать. Если вы не укажете контроллер, все контроллеры будут созданы. Например:
рельсы генерируют конструкцию: контроллеры users -c = сеансы
Это создаст класс контроллера в app/controller/users/sessions_controller.rb следующим образом:
class Users::ConfirmationsController < Devise::ConfirmationsController
content...
end
см. ответ @ErikTrautman.
вы должны проверить источник (в частности, в корневом каталоге проекта app/
). @MatheusMoreira предоставляет ссылку на источник на GitHub, но если вы предпочитаете просматривать его локально в своем собственном текстовом редакторе, вы можете найти место установки драгоценного камня Devise с помощью gem which devise
.
Например, чтобы увидеть Devise::SessionsController
:
$ vim $(gem which devise | sed 's|\(.*\)\(/.*\)\{2\}|\1|')/app/controllers/devise/sessions_controller.rb
(Или вы могли бы просто клонировать репозиторий git и ткнуть вокруг этого пути.)
$ git clone https://github.com/plataformatec/devise
$ cd devise
$ vim app/controllers/devise/sessions_controller.rb