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的电子邮件.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...