2017-10-16 94 views
0

我是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,但我不明白爲什麼我錯了,因爲我在模型中使用自由職業者(自)。 感謝您的幫助!

+0

它很明顯 - 你在使用變量'freelancers'而沒有在你的rake任務中定義它。 'UserMailer.contract_email(Freelancer.all).deliver_now' – max

+0

謝謝,它也幫了我很多! – daedalus418

回答

1

它看起來像在你的任務中,send_contract_email,你正在使用尚未初始化的局部變量freelancers。在調用UserMailer.contract_email之前,您需要將freelancers設置爲任務中的自由職業者列表,否則將該列表作爲參數傳遞給任務。 Here's a nice post,其中包含有關如何將參數傳遞給rake任務的信息。

+0

感謝您的建議和鏈接。我下次保存它。 – daedalus418