Rails-Devise wyślij e-mail użytkownika po rejestracji / Utwórz

Jestem całkiem nowy w rails i staram się coś rozgryźć. Niedawno dostałem całą konfigurację Mailera i działał dobrze. Ale staram się dodać drugi mailer dla działań użytkownika i to nie wydaje się działać.

Próbuję osiągnąć to, że użytkownik rejestruje się, wysyła e-mail do administratora, a następnie administrator musi włączyć użytkownika. Obecnie, gdy administrator włączy użytkownika, wyśle mu e-mail, ale z jakiegoś powodu mój nowo utworzony e-mail użytkownika nie odpala. Myślę, że to jest ponieważ moja metoda tworzenia nie działa, gdzie ją umieścić? Czy muszę nadpisać metodę użytkownika?

Mój Kontroler UserMailer:

class UserMailer < ActionMailer::Base
  default from: "[email protected]"
  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 => '[email protected]', :subject => "New User created please review and enable.")
  end
end

My 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

Ale ta metoda create nigdy nie zostanie uruchomiona. Co się mylę? Czy jest inna metoda, którą muszę umieścić UserMailer.send_new_user_message (@user).dostarczyć?

Author: user1434177, 2013-07-05

2 answers

Kiedy użytkownicy rejestrują się w Devise, nie przechodzą przez UsersController.

Możesz dodać kod wysyłający pocztę w modelu User.

Na przykład w 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

Odbywa się to poprzez wykorzystanie Active Record after_create callback.

 40
Author: Domon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-05 02:06:08

E-maile potwierdzające powinny być wysyłane z kontrolera. Można w prosty sposób nadpisać wartości domyślne Devise::RegistrationsController.

Utwórz plik app/controllers/my_registrations_controller.rb (nazwij to jak chcesz)

class MyRegistrationsController < Devise::RegistrationsController

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

end

Następnie w Twoich trasach:

devise_for :users, :controllers => { :registrations => "my_registrations" }
 56
Author: Dex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 23:56:42