Это то, что я делаю, чтобы переопределить контроллер Devise Registrations. Мне нужно было поймать исключение, которое потенциально может быть сгенерировано при регистрации нового пользователя, но вы можете применить ту же технику для настройки логики регистрации.
приложение / контроллеры / изобрести / заказ / registrations_controller.rb
class Devise::Custom::RegistrationsController < Devise::RegistrationsController
def new
super # no customization, simply call the devise implementation
end
def create
begin
super # this calls Devise::RegistrationsController#create
rescue MyApp::Error => e
e.errors.each { |error| resource.errors.add :base, error }
clean_up_passwords(resource)
respond_with_navigational(resource) { render_with_scope :new }
end
end
def update
super # no customization, simply call the devise implementation
end
protected
def after_sign_up_path_for(resource)
new_user_session_path
end
def after_inactive_sign_up_path_for(resource)
new_user_session_path
end
end
Обратите внимание, что я создал новую структуру каталогов devise/custom
в app/controllers
, где я разместил свою настроенную версию RegistrationsController. В результате вам нужно будет переместить ваши представления регистрации устройств с app/views/devise/registrations
на app/views/devise/custom/registrations
.
Также обратите внимание, что переопределение контроллера devis Registrations позволяет вам настроить несколько других вещей, например, куда перенаправлять пользователя после успешной регистрации. Это делается путем переопределения методов after_sign_up_path_for
и / или after_inactive_sign_up_path_for
.
routes.rb
devise_for :users,
:controllers => { :registrations => "devise/custom/registrations" }
Эта запись может предложить дополнительную информацию, которая может вас заинтересовать.