【发布时间】:2011-11-30 17:24:50
【问题描述】:
我正在覆盖devise_invitable 控制器,并且在我的创建方法中,我想将额外的值传递给invitations_instructions 电子邮件模板。例如组名,有没有人成功过,如果有,请在这里给我一些线索。
我尝试过的...
我的@group 在我的Users::InvitesController < Devise::InvitationsController 创建方法中未在电子邮件模板中定义。
尝试在我的创建中添加:skip_invitation => true,然后手动发送电子邮件...
self.resource = resource_class.invite!(params[resource_name], current_inviter, :skip_invitation => true)
::Devise.mailer.invitation_instructions(self.resource).deliver
但这给出了错误数量的参数,所以我没有从文档中正确读取。
更新 - 可能的解决方案
唯一的方法似乎是这样,但我很好奇是否有更好的方法来使用提供的模板并设计邮件程序
在我的/app/controller/users/InvitesController#create
(继承自InvitationsController)
self.resource = resource_class.invite!(params[resource_name], current_inviter) do |u|
u.skip_invitation = true
end
UserMailer.invitation_instructions(self.resource, current_inviter, @object).deliver
UserMailer 是我的一般(标准)动作邮件,类似于...
def invitation_instructions(resource, inviter, object)
@resource = resource
@object = object
@inviter = inviter
mail(:to => resource.email, :subject => 'New invitation from ' + inviter.first_name)
end
【问题讨论】:
-
您在更新中提供的解决方案有效。但是感觉不是很干净。我也喜欢更清洁的解决方案。一种方法可能是修补 devise_invitable 并重新定义
invite!以接受更多选项。 -
@andrew-lank 请将您的更新提取到答案并接受它。
标签: ruby-on-rails-3 devise actionmailer