2015-02-10 63 views
0

我試圖將current_employer.id傳遞給動作郵件程序。因此,我可以給屬於僱主的用戶發送電子郵件。將current_user.id傳遞給actionmailer

我的郵件看起來像這樣。

class ScheduleMailer < ActionMailer::Base 

    default to: Proc.new { Employee.where(:employer_id => current_employer.id 
     ).pluck(:email) }, 
     from: '[email protected]' 



def schedule_post_reg(employ) 

mail(:subject => "Your schedule has been posted.") 

end 


end 

我得到這個錯誤

NameError (undefined local variable or method `current_employer' for #<ScheduleMailer:0x0000010cec0880>): 
    app/mailers/schedule_mailer.rb:3:in `block in <class:ScheduleMailer>' 
    app/mailers/schedule_mailer.rb:10:in `schedule_post_reg' 
    app/controllers/schedules_controller.rb:235:in `approve_shift' 

如何通過不是的ActionMailer將不勝感激的current_employer.id任何建議。

+0

在你的控制器'@employer = Employer.find_by_id(USER_ID) 僱主= @employer ScheduleMailer.schedule_post_reg控制器寫入somethigng(聘用, @employer).deliver' – Sontya 2015-02-10 14:16:50

回答

1

Mailer無法直接訪問請求上下文。原因是因爲電子郵件不一定是HTTP請求的結果。例如,如果您從CLI傳送電子郵件,則不會有HTTP請求。

您需要通過employer作爲郵件的參數。

class ScheduleMailer < ActionMailer::Base 

    default from: '[email protected]' 

    def schedule_post_reg(employee, employ) 
    mail({ 
     :to => employee.email 
     :subject => "Your schedule has been posted.") 
    }) 
    end 

end 

如果您需要發送相同的電子郵件,以不同的員工,給予一個僱主,您可以通過僱主和採摘的所有電子郵件進入「到:」字段中(但所有的收件人將看到所有其他電子郵件)

def schedule_post_reg(employer, employ) 
    mail({ 
     :to => Employee.where(:employer_id => employer.id).pluck(:email) 
     :subject => "Your schedule has been posted.") 
    }) 
    end 

或使用bcc,或循環中的所有電子郵件和撥打郵件一次爲每一位員工的電子郵件生成每個員工不同的電子郵件。

+0

謝謝!工作過一種享受! – levim 2015-02-10 14:38:20

0

在這樣

@employer = Employer.find_by_id(params[:id]) 
ScheduleMailer.schedule_post_reg(employ, @employer).deliver 

在梅勒

def schedule_post_reg(employ, employer) 
    employees_emails = Employee.where(:employer_id => employer.id 
    ).map(&:email).join(",") 
    mail(:to => employees_emails, :subject => "Your schedule has been posted.") 
end