Rails-Devise envoyer un e-mail à l'utilisateur après s'inscrire / créer

je suis assez nouveau aux rails et j'essaie de comprendre les choses. J'ai récemment reçu un postier tout prêt et ça marchait très bien. Mais j'essaie d'ajouter un deuxième mailer pour les actions des utilisateurs et cela ne semble pas fonctionner.

ce que j'essaie de faire, c'est qu'un utilisateur s'inscrive, envoie un email à l'administrateur, puis l'administrateur doit activer l'utilisateur. Actuellement, lorsque l'administrateur activera l'utilisateur, il lui enverra un e-mail, mais pour une raison quelconque, mon e-mail utilisateur nouvellement créé ne démarre pas. Je pense c'est parce que ma méthode create ne fonctionne pas, où devrais-je la mettre? Dois-je réécrire une méthode de l'utilisateur?

Mon UserMailer contrôleur:

class UserMailer < ActionMailer::Base
  default from: "website@rnd.designcom.com.au"
  def send_enabled_message(user)
    @user = user
    mail(:to => user.email, :subject => "Welcome to Pixel Technologies!!!")
  end
  def send_new_user_message(user)
    @user = user
    mail(:to => 'ben.suryn@rnd.designcom.com.au', :subject => "New User created please review and enable.")
  end
end

Mon users_controller:

class UsersController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

# POST /users
def create
  @user = User.new(user_params)
  puts "******************** NEW USER ****************************"
  puts user_params
  if @user.save
    puts 'Sending email for create user'
    UserMailer.send_new_user_message(@user).deliver
    redirect_to @user, notice: 'User was successfully created.'
  else
    render action: 'new'
  end
end

mais cette méthode create n'est jamais utilisée. Que suis-je donig mal. Y a-t-il une autre méthode que j'ai besoin de mettre UserMailer.send_new_user_message (@user).livrer?

29
demandé sur user1434177 2013-07-05 05:18:36

2 réponses

quand les utilisateurs s'inscrivent avec Devise, ils ne passent pas par le UsersController.

vous pourriez vouloir ajouter le code d'envoi de courrier dans le User modèle.

Par exemple,app/models/user.rb:

class User < ActiveRecord::Base
  # ...

  after_create :send_admin_mail
  def send_admin_mail
    UserMailer.send_new_user_message(self).deliver
  end

  # ...
end

Ceci est fait en utilisant l'Enregistrement Actif after_create rappel.

40
répondu Domon 2013-07-05 02:06:08

les e-mails de Confirmation doivent être envoyés par le contrôleur. Il est simple d'Outrepasser le Devise::RegistrationsController valeurs par défaut.

Créer le fichier app/controllers/my_registrations_controller.rb (le nom de ce tout ce que vous voulez)

class MyRegistrationsController < Devise::RegistrationsController

  def create
    super
    if @user.persisted?
      UserMailer.new_registration(@user).deliver
    end
  end

end

puis dans vos routes:

devise_for :users, :controllers => { :registrations => "my_registrations" }
56
répondu Dex 2014-02-18 23:56:42