Ruby on rails Rake mailer任务只向最后一个订户发送新闻稿
昨晚我发现我的rake邮件任务发送我的新闻稿,只发送给最后一个订户。但为什么?!我使用Heroku调度程序来执行任务 这是我在调度程序中的代码。rake:Ruby on rails Rake mailer任务只向最后一个订户发送新闻稿,ruby-on-rails,heroku,rake,mailer,Ruby On Rails,Heroku,Rake,Mailer,昨晚我发现我的rake邮件任务发送我的新闻稿,只发送给最后一个订户。但为什么?!我使用Heroku调度程序来执行任务 这是我在调度程序中的代码。rake: desc "This task is called by the Heroku scheduler add-on" task :send_newsletter => :environment do if Time.now.saturday? NewsletterMailer.weekly_best.deliver end
desc "This task is called by the Heroku scheduler add-on"
task :send_newsletter => :environment do
if Time.now.saturday?
NewsletterMailer.weekly_best.deliver
end
end
这就是我如何在我的时事通讯中定义周刊的最佳方法
:
def weekly_best
@subscriptions = NewsletterSubscription.where(active: true)
@plugins = Plugin.where("created_at >= ?", Date.today.beginning_of_week).where("cached_votes_up > ?", 0).order(:cached_votes_up => :desc).first(5)
@subscriptions.each do |s|
mail(to: s.email, from: "Great Wavelengths <hi@greatwavelengths.com>", subject: "Weekly best gear")
end
end
def每周最佳
@订阅=新闻稿订阅。其中(活动:true)
@plugins=Plugin.where(“创建时间>=?”,日期。今天。每周的开始)。where(“缓存的投票数>>?”,0)。顺序(:缓存的投票数>>:描述)。第一(5)
@订阅。每个都有|
邮件(收件人:s.email,发件人:“伟大的波长”,主题:“每周最佳装备”)
终止
终止
正如你所看到的,我确实迭代了所有订阅的电子邮件地址,但是为什么它不发送给每个人呢
希望你们能提供帮助:)方法时事通讯。每周\u best
将只返回您订阅的最后一封电子邮件。每个循环。然后在这一封电子邮件中调用deliver
,这就是为什么只发送一封电子邮件的原因
要解决此问题,您需要在每封邮件上分别调用deliver
。你可以这样做:
class NewsletterMailer
def self.deliver_weekly_best
subscriptions = NewsletterSubscription.where(active: true)
plugins = Plugin.where(...)
# Call deliver for each subscription
subscriptions.each { |sub| weekly_best(sub, plugins).deliver }
end
def weekly_best(sub, plugins)
@plugins = plugins
mail(to: sub.email, ...)
end
end
然后在你的日程安排中,你只需做:
NewsletterMailer.deliver_weekly_best
很抱歉延迟回复,圣诞节已经过去了。是的,成功了,非常感谢!