gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 20:58:18 26 4
gpt4 key购买 nike

我正在覆盖 devise_invitable Controller ,在我的 create 方法中,我想将额外的值传递给 invitations_instructions电子邮件模板。例如组名,有没有人在这方面成功过,如果是这样,请在这里给我一些线索。

我试过的...

我的 @group在我的 Users::InvitesController < Devise::InvitationsController电子邮件模板中未定义 create 方法。

尝试添加 :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是我的通用(标准) Action 邮件程序,类似于...
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 .为此,我个人会在邮件程序中使用某种类型的查询(不干净,但它是封装的,因此不那么“神奇”)来检索这些对象。

此外,如果您想使用自定义电子邮件模板而不是设计的,您只需将它们添加到 app/views/my_mailer/ directory 和 devise 将更喜欢该目录中的电子邮件,而不是来自 gem 的电子邮件。

关于ruby-on-rails-3 - 将额外的实例变量传递给 devise_invitable 电子邮件模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7648918/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com