To właśnie robię, aby zastąpić kontroler Devise Registrations. Musiałem złapać wyjątek, który może zostać zgłoszony podczas rejestracji nowego użytkownika, ale możesz zastosować tę samą technikę, aby dostosować logikę rejestracji.
app/controllers/opracowania/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
pamiętać, że stworzył nową strukturę katalogów pod app/controllers
devise/custom
gdzie Położyłem dostosowaną wersję RegistrationsController. W rezultacie będziesz musiał przenieść swoje widoki rejestracji opracowań z app/views/devise/registrations
do app/views/devise/custom/registrations
.
Należy również pamiętać, że nadpisanie kontrolera rejestracyjnego pozwala dostosować kilka innych rzeczy, takich jak miejsce przekierowania użytkownika po pomyślnej rejestracji. Odbywa się to przez przesłonięcie metod after_sign_up_path_for
i/lub after_inactive_sign_up_path_for
.
routes.rb
devise_for :users,
:controllers => { :registrations => "devise/custom/registrations" }
Ten post może oferować dodatkowe informacje, może być zainteresowany.
Pan spojrzał na tym stanowisku? http://stackoverflow.com/questions/3546289/override-devise-registrations-controller – mbreining
@feelway, nie, nie, ale wygląda obiecująco ... Sądzę, że "super" oznacza, że dziedziczy on po kontrolerze Devisera? – Angela
Tak. Super wykona kod z odziedziczonej metody. – dombesz