在用户注册Ruby

时间:2015-11-20 20:17:20

标签: sql ruby-on-rails ruby email

我在网页应用程序的设计中遵循了ruby on rails教程,现在我自己冒险添加一些本教程未涉及的功能。

目前,我正在尝试向具有admin角色的所有用户发送电子邮件。 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

那会是更好的选择吗?

1 个答案:

答案 0 :(得分:0)

我猜它“永远不会进入管理员的do循环”,因为User.find_by_admin("true")没有返回任何记录,即没有管理员可以循环。你的意思是User.find_by_admin(true)吗?

无论如何,我认为你接近这个错误:你应该只发送一封电子邮件到例如: admins@example.com并让该邮箱将所有邮件转发给您的所有管理员。