将 current_user.id 传递给 actionmailer
Pass current_user.id into actionmailer
我正在尝试将 current_employer.id 传递到操作邮件程序中。所以我可以结束给属于雇主的用户的电子邮件。
我的邮件看起来像这样。
class ScheduleMailer < ActionMailer::Base
default to: Proc.new { Employee.where(:employer_id => current_employer.id
).pluck(:email) },
from: 'noreply@scheduled.com'
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'
任何关于如何传递 current_employer.id 而不是 actionmailer 的建议将不胜感激。
Mailer
无法直接访问请求上下文。原因是电子邮件不一定是 HTTP 请求的结果。例如,如果您从 CLI 传送电子邮件,则没有 HTTP 请求。
您需要将 employer
作为邮件程序的参数传递。
class ScheduleMailer < ActionMailer::Base
default from: 'noreply@usescheduled.com'
def schedule_post_reg(employee, employ)
mail({
:to => employee.email
:subject => "Your schedule has been posted.")
})
end
end
如果您需要向不同的员工发送相同的电子邮件,给定一个雇主,您可以传递雇主并将所有电子邮件提取到 "to:" 字段中(但所有收件人都会看到所有其他电子邮件)
def schedule_post_reg(employer, employ)
mail({
:to => Employee.where(:employer_id => employer.id).pluck(:email)
:subject => "Your schedule has been posted.")
})
end
或使用bcc
,或循环所有电子邮件并为每个员工电子邮件调用一次邮件程序,为每个员工生成不同的电子邮件。
在控制器中写这样的东西
@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
我正在尝试将 current_employer.id 传递到操作邮件程序中。所以我可以结束给属于雇主的用户的电子邮件。
我的邮件看起来像这样。
class ScheduleMailer < ActionMailer::Base
default to: Proc.new { Employee.where(:employer_id => current_employer.id
).pluck(:email) },
from: 'noreply@scheduled.com'
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'
任何关于如何传递 current_employer.id 而不是 actionmailer 的建议将不胜感激。
Mailer
无法直接访问请求上下文。原因是电子邮件不一定是 HTTP 请求的结果。例如,如果您从 CLI 传送电子邮件,则没有 HTTP 请求。
您需要将 employer
作为邮件程序的参数传递。
class ScheduleMailer < ActionMailer::Base
default from: 'noreply@usescheduled.com'
def schedule_post_reg(employee, employ)
mail({
:to => employee.email
:subject => "Your schedule has been posted.")
})
end
end
如果您需要向不同的员工发送相同的电子邮件,给定一个雇主,您可以传递雇主并将所有电子邮件提取到 "to:" 字段中(但所有收件人都会看到所有其他电子邮件)
def schedule_post_reg(employer, employ)
mail({
:to => Employee.where(:employer_id => employer.id).pluck(:email)
:subject => "Your schedule has been posted.")
})
end
或使用bcc
,或循环所有电子邮件并为每个员工电子邮件调用一次邮件程序,为每个员工生成不同的电子邮件。
在控制器中写这样的东西
@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