瑞克邮递员任务仅将新闻通讯发送给最后一个订阅者

昨晚,我发现了我的rake mailer任务,该任务将发送新闻稿,仅将其发送给最后一个订阅者。但为什么?!我使用Heroku Scheduler执行任务。

这是我在scheduler.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
end

这就是我在weekly_best中定义NewsletterMailer的方式:

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

如您所见,我会遍历订阅的所有电子邮件地址,但是为什么不将其发送给所有人?

希望你们可以提供帮助:)

qq376055355 回答:瑞克邮递员任务仅将新闻通讯发送给最后一个订阅者

方法NewsletterMailer.weekly_best将仅返回@subscriptions.each循环中的最后一封电子邮件。然后,您在这一封电子邮件中致电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
本文链接:https://www.f2er.com/2878416.html

大家都在问