如何正确获取邮件
How to get mails correctly
我是 Rails 的新手,我遇到了一个问题:
我必须为 Coworking Area 构建一个应用程序。自由职业者填写表格,他们可以有以下两种状态之一:接受或确认。
我用 Enum 类型处理这个。
我可以收到他们的邮件:Freelancer.confirm.map{ |freelancer| freelancer.email}
在 Rails 控制台中:
Freelancer Load (2.8ms) SELECT "freelancers".* FROM "freelancers"
WHERE "freelancers"."status" = ? [["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>
当我运行
耙 send_contract_email
为了测试一切正常并检查电子邮件是否已发送,它显示错误:
rake aborted! NameError: undefined local variable or method
freelancers' for main:Object
/home/gaelle/Bureau/corworking/coworking/lib/tasks/email_tasks.rake:3:in
block 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
`' Tasks: TOP => send_contract_email (See full trace by running
task with --trace)
问题似乎出在 UserMailer 中,但我不明白为什么我错了,因为我在模型中使用了 Freelancer (with self)。
感谢您的帮助!
您的任务 send_contract_email
中似乎使用了一个尚未初始化的局部变量 freelancers
。在调用 UserMailer.contract_email
之前,您需要将 freelancers
设置为任务中的自由职业者列表,或者将该列表作为参数传递到任务中。 Here's a nice post 包含有关如何将参数传递给 rake 任务的信息。
我是 Rails 的新手,我遇到了一个问题: 我必须为 Coworking Area 构建一个应用程序。自由职业者填写表格,他们可以有以下两种状态之一:接受或确认。 我用 Enum 类型处理这个。 我可以收到他们的邮件:Freelancer.confirm.map{ |freelancer| freelancer.email}
在 Rails 控制台中:
Freelancer Load (2.8ms) SELECT "freelancers".* FROM "freelancers" WHERE "freelancers"."status" = ? [["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>
当我运行 耙 send_contract_email 为了测试一切正常并检查电子邮件是否已发送,它显示错误:
rake aborted! NameError: undefined local variable or method
freelancers' for main:Object /home/gaelle/Bureau/corworking/coworking/lib/tasks/email_tasks.rake:3:in
block 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 `' Tasks: TOP => send_contract_email (See full trace by running task with --trace)
问题似乎出在 UserMailer 中,但我不明白为什么我错了,因为我在模型中使用了 Freelancer (with self)。 感谢您的帮助!
您的任务 send_contract_email
中似乎使用了一个尚未初始化的局部变量 freelancers
。在调用 UserMailer.contract_email
之前,您需要将 freelancers
设置为任务中的自由职业者列表,或者将该列表作为参数传递到任务中。 Here's a nice post 包含有关如何将参数传递给 rake 任务的信息。