Ruby on Rails - 在 Rake 任务中从数据库获取用户电子邮件
Ruby on Rails - Get user email from database in a Rake Task
我有那个 Mailer 方法和一个 Rake 任务,稍后用 Cron Job 安排并用 Gem 自动化每当向用户发送电子邮件时:
# Mailer:
class MailCourseWarnMailer < ActionMailer::Base
def course_available(user)
@user = user
mail(to: @user.email, subject: "Curso disponível") # ... email sending logic goes here
end
end
# Task
require 'rake'
desc 'send digest email'
task :send_warn_course, [:user_email] => :environment do |t, args|
user = MailCourseWarn.find_by_email args[:user_email]
MailCourseWarnMailer.course_available(user).deliver!
end
# Model
class MailCourseWarn < ActiveRecord::Base
belongs_to :course
validates :name, :email, presence: true
end
我目前 运行 任务是这样的:rake send_warn_course['user@email.com']
但我需要它是自动的,在某种程度上当 运行 rake send_warn_course Rake 任务发送给我数据库中的所有用户。
任何想法我该怎么做?谢谢
找到需要电子邮件的用户并遍历他们。当然,您是在以某种方式指出哪些用户需要数据库中的电子邮件,因此您只想查询所有这些用户记录,遍历它们,然后发送电子邮件。
task :send_warn_course, [:user_email] => :environment do |t, args|
MailCourseWarn.where(needs_warned: true).each do |user|
MailCourseWarnMailer.course_available(user).deliver!
end
end
我有那个 Mailer 方法和一个 Rake 任务,稍后用 Cron Job 安排并用 Gem 自动化每当向用户发送电子邮件时:
# Mailer:
class MailCourseWarnMailer < ActionMailer::Base
def course_available(user)
@user = user
mail(to: @user.email, subject: "Curso disponível") # ... email sending logic goes here
end
end
# Task
require 'rake'
desc 'send digest email'
task :send_warn_course, [:user_email] => :environment do |t, args|
user = MailCourseWarn.find_by_email args[:user_email]
MailCourseWarnMailer.course_available(user).deliver!
end
# Model
class MailCourseWarn < ActiveRecord::Base
belongs_to :course
validates :name, :email, presence: true
end
我目前 运行 任务是这样的:rake send_warn_course['user@email.com']
但我需要它是自动的,在某种程度上当 运行 rake send_warn_course Rake 任务发送给我数据库中的所有用户。
任何想法我该怎么做?谢谢
找到需要电子邮件的用户并遍历他们。当然,您是在以某种方式指出哪些用户需要数据库中的电子邮件,因此您只想查询所有这些用户记录,遍历它们,然后发送电子邮件。
task :send_warn_course, [:user_email] => :environment do |t, args|
MailCourseWarn.where(needs_warned: true).each do |user|
MailCourseWarnMailer.course_available(user).deliver!
end
end