ruby-on-rails - 在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
解决方案
正如@konstantin-strukov 建议的那样,您应该避免使用回调,尤其是在发送电子邮件时。您超出了模型在 MVC 中应该做什么的范围,即与数据库交互。
您可以在控制器中移动它,例如:
class UsersController < ApplicationController
...
def destroy
UserMailer.bye_email(@user).deliver_now
@user.destroy!
redirect_to ...
end
end
推荐阅读
- php - 在我的控制器中声明更多数据库时,Laravel 表单验证不起作用
- powershell - 在 shell 脚本中使用 rsh
- python - 我可以在不必为每条记录运行这些循环的情况下对这些记录进行聚类吗?
- python - 如何使用 Tkinter Listbox 小部件获取 SQLite 3 表中列中的行的值?
- google-sheets - QUERY 源范围的 Google 表格绝对参考
- apache - htaccess url 重写。我在一个循环中
- c++ - 如何在 C++ 程序中进行适当的换行
- php - 在 Divi 的主菜单中添加第二行
- mysql - 如何使用 mySQL 使用当前数据库表中的信息更新不同的数据库表?
- python - 在opencv(ffmpeg)中使用HEVC编解码器编码视频