Devise : Passing params to after_* paths
Devise allows us to customize after_signup_path
by overriding a protected
method in RegistrationsController
.
class RegistrationsController < Devise::RegistrationsController
protected
def after_inactive_sign_up_path_for(resource)
your_custom_path
end
def after_sign_up_path_for(resource)
your_custom_path
end
end
If we are using :confirmable
with devise, sometimes we need to show user a message -
Confirmation email has been sent to you <user_email>.
Please confirm your email.
Lets say that route name for this is confirmation_email_sent_path
.
class RegistrationsController < Devise::RegistrationsController
protected
def after_inactive_sign_up_path_for(resource)
confirmation_email_sent_path
end
end
Now how to pass user’s email to this path?
One way is to override create
action of Devise’s RegistrationsController. But this is bad as we will get dependent on current Devise implementation.
Lets see how we can achieve this with minimum dependency.
resource
has the User
object. So we can use that to pass user’s email to the confirmation_email_sent
action.
class RegistrationsController < Devise::RegistrationsController
protected
def after_inactive_sign_up_path_for(resource)
confirmation_email_sent_path(email: resource.email)
end
end
Now we can access this email in confirmation_email_sent
action.
def confirmation_email_sent
@email = params[:email]
end