希望设计 Models::Recoverable 根据用户状态发送不同的重置指令

Would like Devise Models::Recoverable to send different reset instructions based on user state

我们的用户模型包含一个名为 user_state 的参数。我们想发送四封不同的电子邮件说明,说明用户必须根据 user_state 重置密码的方式和原因:new_user、password_forgotten(用户已请求重置密码)、inactive (最近未使用帐户)和暂停(由于某些不良行为导致登录被禁用)。

在上述所有状态下,我们首先要将当前密码设置为随机密码,然后为每种状态类型发送自定义电子邮件。

我找到了发送重置邮件的 Devise send_reset_password_instructions 方法。但是我无法根据上面列出的 user_state 找到发送不同电子邮件内容的合理方法。

有什么建议吗?

您可以通过多态化邮件程序视图来做到这一点。假设您的 UserMailer 中有 reset_password_email(user) 方法来发送该消息。你有 2 种可能的状态:masterslave(只是一个例子)。

因此,为了生成 2 个不同的消息体,您将它们放在 app/views/user_mailer/_master.html.erbapp/views/user_mailer/_slave.html.erb 中的不同部分(或者您使用的任何 html 解析器,我更喜欢 slim)。

然后您只需要像这样在 app/views/user_mailer/reset_password_email.html.erb 中输入正确的调用:

<%= render partial: @user.state, user: @user %>