在Rails中如何关闭电子邮件提醒作业

时间:2018-05-24 15:03:47

标签: ruby-on-rails

我有一位客户抱怨发送电子邮件提醒。所以我查看了代码,我认为有几个地方我可以尝试解决。

提醒电子邮件控制器,其中:

onecoreuap\drivers\wdm\bluetooth\user\winrt\device\bluetoothledevice.cpp(728)\Windows.Devices.Bluetooth.dll!00007FFC1601AE2F: (caller: 00007FFC1602081A) Exception(1) tid(212c) 80070005 Access is denied.

用户控制器包括:

class Admin::ReminderEmailsController < Admin::ApplicationController

def edit
 @system_email = SystemEmail.first
end

def update
 @system_email = SystemEmail.first
 flash[:notice] = 'System Email updated successfully' if @system_email.update_attributes(system_email_params)
 respond_with @system_email, location: admin_system_emails_path
end

private

def system_email_params
  params.require(:system_email)
       .permit(:reminder_content)
end
end

培训提醒工作

  def send_training_email(user)
   future_date = DateTime.current + 10.days
   TrainingReminderJob.set(wait_until: future_date).perform_later(user)
 end

我倾向于把训练提醒工作弄得一团糟,因为它似乎是最不具侵略性的。只是在表演中添加足够吗?:

class TrainingReminderJob < ApplicationJob
 queue_as :default

 def perform(user)
  UserAgentMailer.training_reminder(user).deliver_later
 end
end

1 个答案:

答案 0 :(得分:0)

通常,您可以向User模型添加一个布尔列,例如skip_reminder_email,并通过您的UI使其可以更改为admin和/或用户。然后在send_training_email方法中对其进行测试。

$ rails g migration AddSkipReminderEmailToUser skip_reminder_email:boolean
$ rake db:migrate

然后在你的方法中:

def send_training_email(user)
  unless user.skip_reminder_email
    future_date = DateTime.current + 10.days
    TrainingReminderJob.set(wait_until: future_date).perform_later(user)
  end
end

同样,您需要管理员或用户将skip_reminder_email布尔值更新为true或false的方法。但是,要在开发中进行测试,您只需从rails控制台更新标志:

irb> User.find(user_id).update(skip_reminder_email: true)

然后在调用send_training_email的UsersController中运行控制器操作。