微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

ruby-on-rails-3 – 将额外的实例vars传递给devise_invitable电子邮件模板

我重写devise_invitable控制器,在我的创建方法中,我想传递额外的值到invitations_instructions电子邮件模板.例如组名,有谁成功了,如果是,请给我一些线索在这里.

我试过了什么

我的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’s own procedures for overriding mailer templates.

首先创建一个从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 举报,一经查实,本站将立刻删除。

相关推荐