[英]Sending email to all admins upon user sign up in Ruby
我在设计Web应用程序时遵循了ruby on rails教程,现在我自己冒险尝试添加一些本教程未涵盖的功能。
目前,我正在尝试向所有具有管理员角色的用户发送电子邮件。 admin角色在本教程中作为用户模型上的布尔字段admin实现。 我试图通过以下方法做到这一点:
在user_controller.rb中的create方法中调用@user.send_activation_email
,将转到user.rb中的定义
def send_activation_email
UserMailer.account_activation(self).deliver_now
UserMailer.user_signed_up(self).deliver_now # my modified code
end
我在user_mailer.rb中创建了user_signed_up
def user_signed_up(user)
@user = user
# Send email to all admins that user has signed up
User.find_by_admin("true") do |admin|
mail to: admin.email, subject: "A new user has signed up"
end
end
但是当我在user_mailer_test.rb中使用
test "user_signed_up" do
user = users(:archer)
mail = UserMailer.user_signed_up(user)
assert_equal "A new user has signed up", mail.subject
User.find_by_admin("true") do |admin|
assert_equal [admin.email], mail.to
assert_equal ["noreply@example.com"], mail.from
end
end
我发现在assert_equal "A new user has signed up", mail.subject
上测试失败。 看起来一切正常,但它从未进入管理员的do循环。 我查询数据库不正确吗? 有一个更好的方法吗? 我找到了,但是我不确定如何实现
class AdminMailer < ActionMailer::Base
default to: Proc.new { Admin.pluck(:email) },
from: 'notification@example.com'
def new_registration(user)
@user = user
mail(subject: "New User Signup: #{@user.email}")
end
end
那会是更好的选择吗?
我猜它“永远不会进入管理员的do循环”,因为User.find_by_admin("true")
不会返回任何记录,即没有管理员可以循环。 您可能是说User.find_by_admin(true)
吗?
无论如何,我认为您正在解决此错误:您应该只向例如admins@example.com
发送一封电子邮件,并让该邮箱将所有消息转发给您的所有管理员。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.