如何正确地获取邮件

时间:2017-10-16 19:49:39

标签: ruby-on-rails ruby whenever

我是Rails的新手,我遇到了一个问题: 我必须为Coworking Area构建一个应用程序。自由职业者填写表格,他们可以拥有以下两种状态之一:接受或确认。 我用Enum类型处理这个。 我可以收到他们的邮件:Freelancer.confirm.map {| freelancer | freelancer.email}

在Rails控制台中:

  

Freelancer Load(2.8ms)SELECT“freelancers”。* FROM“freelancers”   在哪里“自由职业者”。“状态”=? [[“status”,0]] =>   [“freelancer1@mail.com”,“freelancer2@mail.com”,   “freelancer3 @ mail.fr”,“freelancer4@mail.com”,“freelancer5 @ mail.fr”,   “freelancer6@mail.com”,“freelancer7@mail.com”,   “freelancer8@mail.com”,“freelancer9@mail.com”,   “freelancer10@mail.com”,“freelancer11@mail.com”]

但我无法在我的应用中正确使用它:

在我的app / models / freelancer.rb

class Freelancer < ApplicationRecord
    enum status: [:confirm, :accept]

    def send_contract_email
        UserMailer.contract_email(self).deliver_now
    end
end

在app / mailers / user_mailer.rb

class UserMailer < ApplicationMailer
    def contract_email(freelancers)
        @emails = freelancers.accept.map{|freelancer| freelancer.email}
        mail(to: @emails, subject: 'Welcome to my site')
    end
end

在lib / tasks / email_tasks.rake

desc 'send contract email'
task send_contract_email: :environment do
    UserMailer.contract_email(freelancers).deliver_now
end

在config / environments / schedule.rb中(为方便起见,设置为5分钟)

every '5 * * * *' do
    rake 'send_contract_email'
end

在app / views / user_mailer / contract_email.html.erb

<!DOCTYPE html>
<html>
    <head>
        <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
    </head>
    <body>
        <h1>Hi!</h1>
  </body>
</html>

我跑的时候 rake send_contract_email 为了测试一切正常并检查电子邮件是否发送,它会显示错误:

  耙子流产了! NameError:未定义的局部变量或方法   freelancers' for main:Object /home/gaelle/Bureau/corworking/coworking/lib/tasks/email_tasks.rake:3:in 阻止'   /home/gaelle/.rvm/gems/ruby-2.4.1/gems/rake-12.1.0/exe/rake:27:in   <top (required)>' /home/gaelle/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in 的eval”   /home/gaelle/.rvm/gems/ruby-2.4.1/bin/ruby_executable_hooks:15:in   ''任务:TOP =&gt; send_contract_email(通过运行查看完整跟踪   任务--trace)

问题似乎出现在UserMailer中,但我无法理解为什么我错了,因为我在模型中使用Freelancer(带有self)。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

您的任务send_contract_email看起来像是在使用尚未初始化的本地变量freelancers。在调用freelancers之前,您需要将UserMailer.contract_email设置为任务中的自由职业者列表,否则将列表作为参数传递给任务。 Here's a nice post包含有关如何将参数传递给rake任务的信息。