我试过了什么
我的Users :: InvitesController中的@group Devise :: InvitationsController create方法在电子邮件模板中未定义.
试图添加:skip_invitation =>在我的创建中是真的,然后手动发送电子邮件…
self.resource = resource_class.invite!(params[resource_name],current_inviter,:skip_invitation => true) ::Devise.mailer.invitation_instructions(self.resource).deliver
但是这给出了错误的参数数量,所以有一些我从文档中读取不正确的东西.
更新 – 可能的解决方案
唯一的方法似乎是这样,但是如果有更好的方法使用提供的模板和设计邮件程序,我很好奇
在我的/ app / controller / users / InvitesController#中创建
(继承自InvitationsController)
self.resource = resource_class.invite!(params[resource_name],current_inviter) do |u| u.skip_invitation = true end UserMailer.invitation_instructions(self.resource,@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 :: Mailer扩展的自定义邮件程序:
class MyMailer < Devise::Mailer helper :application # gives access to all helpers defined within `application_helper`. include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url` default template_path: 'devise/mailer' # to make sure that your mailer uses the devise views end
然后,在config / initializers / devise.rb中,将config.mailer设置为“MyMailer”.这将允许您覆盖任何设计发送和自定义您的喜好的电子邮件.
那么你可以重写invitable_instructions,如下所示:
def invitation_instructions(record,token,opts={}) # Determine a way to set object -- likely through a query of some type @object = get_object_for(record) opts[:subject] = 'New invitation from ' + inviter.first_name super end
从你的例子的主要观点是传递额外的数据来设置@ group / @ object.要做到这一点,我会亲自在邮件程序中使用某种类型的查询(不干净,但它被封装,因此较少“神奇”)来检索这些对象.
另外,如果您想使用自定义邮件模板而不是devise,您可以将它们简单地添加到app / views / my_mailer /目录中,并且设计将更喜欢该目录中的电子邮件来自gem的电子邮件.
原文地址:https://www.jb51.cc/ruby/273339.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。