Esto es lo que estoy haciendo para anular el controlador Devise Registrations. Necesitaba detectar una excepción que potencialmente se puede lanzar al registrar un nuevo usuario, pero puede aplicar la misma técnica para personalizar su lógica de registro.
app/controllers/diseñar/custom/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
Tenga en cuenta que he creado una nueva estructura de directorios en devise/custom
app/controllers
, donde hice mi versión personalizada de la RegistrationsController. Como resultado, deberá mover las vistas de registro de su dispositivo desde app/views/devise/registrations
al app/views/devise/custom/registrations
.
También tenga en cuenta que anular la configuración del controlador de Registros le permite personalizar algunas otras cosas, como dónde redirigir a un usuario después de un registro exitoso. Esto se hace anulando los métodos after_sign_up_path_for
y/o after_inactive_sign_up_path_for
.
routes.rb
devise_for :users,
:controllers => { :registrations => "devise/custom/registrations" }
Este post puede ofrecer información adicional que pueda estar interesado.
¿Has mirado en este post? http://stackoverflow.com/questions/3546289/override-devise-registrations-controller – mbreining
@feelway, no, no lo he hecho, pero parece prometedor ... Supongo que "super" significa que hereda del controlador Devise? – Angela
Sí. Super ejecutará el código del método heredado. – dombesz