Ruby on rails Rake mailer任务只向最后一个订户发送新闻稿

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

昨晚我发现我的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
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

很抱歉延迟回复,圣诞节已经过去了。是的,成功了,非常感谢!