我是Rails的新手,我遇到了一个问题: 我必须为Coworking区域构建应用程序。自由职业者填写表格,他们可以具有以下两种状态之一:接受或确认。 我用Enum类型处理这个。 我可以收到他们的邮件:Freelancer.confirm.map {| freelancer | freelancer.email}如何正确获取邮件
在Rails控制台:
Freelancer Load (2.8ms) SELECT "freelancers".* FROM "freelancers" WHERE "freelancers"."status" = ? [["status", 0]] => ["[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"]
但我不能在我的应用程序正确地使用它:
在我的应用程序/模型/ freelancer.rb
class Freelancer < ApplicationRecord
enum status: [:confirm, :accept]
def send_contract_email
UserMailer.contract_email(self).deliver_now
end
end
在应用/邮件/ 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 /任务/ email_tasks.rake
desc 'send contract email'
task send_contract_email: :environment do
UserMailer.contract_email(freelancers).deliver_now
end
在配置/环境/ schedule.rb(设定为5分钟,更方便)
every '5 * * * *' do
rake 'send_contract_email'
end
而在应用程序/视图/ 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,但我不明白为什么我错了,因为我在模型中使用自由职业者(自)。 感谢您的帮助!
它很明显 - 你在使用变量'freelancers'而没有在你的rake任务中定义它。 'UserMailer.contract_email(Freelancer.all).deliver_now' – max
谢谢,它也帮了我很多! – daedalus418