Personalizando la confirmacion_url en Devise

¿Cómo personaliza esta línea predeterminada generada por Devise en la vista de correo?

@resource.confirmation_token) %>

He escrito un método en mi controlador llamado user_confirm . Y también he definido una ruta para ello. ¿Puedo obtener la URL para enlazar a ese método con token como parámetros?

Utilicé este enrutamiento:

 map.user_confirm 'confirm/:confirmation_token', :controller => 'confirmations', :action => 'show' 

Y este ERB:

 <%= link_to 'Confirm my account', user_confirm_url(:confirmation_token => @resource.confirmation_token) %> 

Y tengo este bonito enlace:

 http://localhost:3000/confirm/RjOnrd5yNREEDwsEfiFa 

Es algo así como (en route.rb):

 devise_scope :user do match '/confirm/:confirmation_token', :to => "devise/confirmations#show", :as => "user_confirm", :only_path => false end 

y en vistas puedes usar algo como:

 <%= link_to 'Confirm my account', user_confirm_url(@resource.confirmation_token) %> 

para Rails 3.

  • rails 4.0.5
  • devise 3.2.4

antes de

url

 http://example.com/users/confirmation?confirmation_token=jevYKv1z9Pr1LsAUB2NX 

app / views / devise / mailer / confirmation_instructions.html.erb:

 

<%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %>

después

config / route.rb:

 devise_scope :user do get 'confirm/:confirmation_token', to: 'devise/confirmations#show' end 

app / views / devise / mailer / confirmation_instructions.html.erb:

 

<%= link_to 'Confirm my acount', confirm_url(@token) %>

url

 http://example.com/confirm/Kezap1iutgvXyQAhyu64 

Lo tengo. Digamos que defino una ruta con nombre así.

 map.user_confirm '/user_confirm', :controller => 'users', :action => 'confirm' 

todo lo que tenía que hacer es

 

<%= link_to 'Confirm my account', user_confirm_url(confirmation_token => @resource.confirmation_token) %>

La personalización de la URL del dispositivo no eliminará la columna ‘confirmada_at’ de la tabla de usuarios, lo que puede hacer es redirigir al usuario después de hacer clic en el enlace de confirmación:

El PASO 1 reemplaza la after_confirmation_path_for en su confirmations_controller:

Cree un nuevo confirmation_controller.rb en el directorio app / controllers:

 class ConfirmationsController < Devise::ConfirmationsController private def after_confirmation_path_for(resource_name, resource) your_new_after_confirmation_path end end 

PASO 2 En config / route.rb, agregue esta línea para que Devise use su ConfirmationsController personalizado. Esto supone que Devise opera en la tabla de usuarios (puede editar para que coincida con la suya).

 devise_for :users, controllers: { confirmations: 'confirmations' } 

PASO 3 Reinicie el servidor web