Подтвердить что ты не робот

Rails - Devise отправляет электронную почту пользователя после sign_up/create

Я новичок в рельсах и пытаюсь разобраться. Недавно я получил почтовую программу для всех, и она работала нормально. Но я пытаюсь добавить вторую почтовую программу для действий пользователя, и она, похоже, не работает.

То, что я пытаюсь достичь, заключается в том, что пользователь подписывается, он отправляет электронное письмо администратору, тогда администратор должен включить пользователя. В настоящее время, когда администратор разрешает пользователю отправлять им электронное письмо, но по какой-то причине мой новый адрес электронной почты пользователя не срабатывает. Я думаю, это потому, что мой метод создания не срабатывает, где я должен его поместить? Нужно ли переписывать пользовательский метод?

Мой контроллер 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]om.au', :subject => "New User created please review and enable.")
  end
end

Мой 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

Но этот метод создания никогда не запускается. Что я делаю неправильно. Есть ли другой метод, который мне нужно поставить UserMailer.send_new_user_message (@user).deliver?

4b9b3361

Ответ 1

Когда пользователи регистрируются с помощью Devise, они не проходят через UsersController.

Возможно, вы захотите добавить код отправки почты в модель User.

Например, в 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

Это делается путем использования обратного вызова Active Record after_create.

Ответ 2

Подтверждающие электронные письма должны быть отправлены с контроллера. Это просто, чтобы переопределить значения Devise::RegistrationsController по умолчанию.

Создайте файл app/controllers/my_registrations_controller.rb (укажите это как хотите)

class MyRegistrationsController < Devise::RegistrationsController

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

end

Затем в ваших маршрутах:

devise_for :users, :controllers => { :registrations => "my_registrations" }