首页 > 解决方案 > 在rails 5中用户删除帐户(before_destroy)后发送电子邮件

问题描述

我对 ruby​​ 有点陌生,所以我的问题是我试图在用户创建、更新和删除之后发送电子邮件。

它适用于创建和更新,我确实收到了确认的电子邮件,但它不适用于destroy,可能是因为我没有正确使用回调before_destroy

我的模型user.rb

class User < ApplicationRecord
    after_create :welcome_send
    before_destroy :goodbye_user, prepend: true
    after_update :update_user

    def welcome_send
        UserMailer.welcome_email(self).deliver_now
    end

    def goodbye_user
        UserMailer.bye_email(self).deliver_now
    end

    def update_user
        UserMailer.update_info(self).deliver_now
    end
end

user_mailer的是:

class UserMailer < ApplicationMailer
    default from: 'no-reply@monsite.fr'

    def welcome_email(user)
      @user = user 
      @url  = 'http://monsite.fr/login' 
      mail(to: @user.email, subject: 'Bienvenue dans la team  !') 
    end

    def bye_email(user)
        @user = user
        mail(to: @user.email, subject: 'A bientôt !') 
    end

    def update_info(user)
        @user = user
        @url = 'http://monsite.fr/login'
        mail(to: @user.email, subject: 'Modification de vos paramètres')
    end
  end

标签: ruby-on-railsruby

解决方案


正如@konstantin-strukov 建议的那样,您应该避免使用回调,尤其是在发送电子邮件时。您超出了模型在 MVC 中应该做什么的范围,即与数据库交互。

您可以在控制器中移动它,例如:

class UsersController < ApplicationController
  ...
  def destroy
    UserMailer.bye_email(@user).deliver_now
    @user.destroy!

    redirect_to ...
  end
end

推荐阅读