2010-12-29 11 views

Respuesta

16

lo hice por razones imperiosas ¡la confirmación del ingenio! método: https://gist.github.com/982181

class User < ActiveRecord::Base 
    devise :invitable, :database_authenticatable, :registerable, :recoverable, 
     :rememberable, :confirmable, :validatable, :encryptable 

    # ... 

    # devise confirm! method overriden 
    def confirm! 
    welcome_message 
    super 
    end 

    # ... 

private 

    def welcome_message 
    UserMailer.welcome_message(self).deliver 
    end 

end 
+7

¿Qué sucede si no está utilizando: confirmable? – Arcolye

+2

Si no es: comfirmable, usaría el mismo método pero llámelo: after_create –

1

miro a los config/devise.rb

Puede cambiar los temas en los archivos de configuración regional (config/lugares/devise.en.yml)

5

Esta es una gran discusión. Anular el método como lo sugiere Benoror funcionará muy bien. Si crees que podrías querer capturar otros eventos de usuario, entonces, como otros han sugerido en otra parte, una clase de observador podría ser el enfoque más limpio. Esta solución es para Rails 3.0.x y 3.1.

Para configurar un observador, realice los siguientes cambios en su archivo de aplicación, agregando este observador a cualquier otro que ya tenga.

#config/application.rb 
config.active_record.observers = :user_observer 

A continuación, cree un nuevo archivo en el directorio de modelos:

#app/models/user_observer.rb 
class UserObserver < ActiveRecord::Observer 
    def after_create(user) 
    Notifier.user_new(user).deliver 
    end 
end 

Si usted tiene una prueba de pepino que ejerce las funciones de usuario crear, puede añadir este paso para que la función y la copia de seguridad con un paso de trabajador para verificar si hay un correo electrónico en la matriz de correo de prueba.

#features/users/sign_up.feature for example 
Scenario: User signs up with valid data 
    ... 
    And I should receive an email with "[Text from your welcome message]" 


#features/common_steps.rb 
Then /^I should receive an email with "([^"]*)"$/ do |value| 
    # this will get the most recent email, so we can check the email headers and body. 
    ActionMailer::Base.deliveries.should_not be_empty 
    @email = ActionMailer::Base.deliveries.last 
    @email.body.should include(value) 
    #@email.from.should == ["[email protected]"] 
end 

You entornos/test.rb deben tener estos valores para construir una matriz de correo en lugar de enviar:

config.action_mailer.delivery_method = :test 
config.action_mailer.perform_deliveries = true 

No hace falta decir que usted puede probar para mucho más (a, desde, etc) en el mensaje, pero esto lo iniciará de una manera BDD si así lo desea.

Véase también algunos temas de mayor edad stackoverflow con penetración en esta pregunta son:

20

no puedo utilizar el "aprobado" respuesta porque no estoy usando Devise's: confirmable.

No me gustaron las otras soluciones porque tiene que usar devoluciones de llamada modelo, que siempre enviarán correos electrónicos de bienvenida, incluso cuando usted cree su cuenta en la consola o una interfaz de administración. Mi aplicación implica la capacidad de importar en masa usuarios desde un archivo CSV. No quiero que mi aplicación envíe un correo electrónico sorpresa a todos los 3000 de uno en uno, pero sí quiero que los usuarios que crean su propia cuenta reciban un correo electrónico de bienvenida. La solución:

1) Anular controlador de inscripciones del Legado:

#registrations_controller.rb 
class RegistrationsController < Devise::RegistrationsController 

    def create 
    super 
    UserMailer.welcome(resource).deliver unless resource.invalid? 
    end 

end 

2) Informe a idear sustituimos su controlador inscripciones:

# routes.rb 
devise_for :users, controllers: { registrations: "registrations" } 

Por supuesto, se puede adaptar "UserMailer" y " devise_for: users "para que coincida con el nombre del modelo que está utilizando.

+1

Para que esto funcione con Devise para no usuarios, necesita usar 'resource' en su lugar:' RegistrationsMailer.welcome (resource) .deliver if resource.persisted? ' – indirect

+0

En esta oración, el correo se envía incluso si el registro de usuario no está completo. –

+2

No, esto está bien como está. El 'unless @ user.invalid?' Se asegura de que no se envíe a menos que se complete el registro. – Arcolye

Cuestiones relacionadas