gpt4 book ai didi

ruby-on-rails - 更改了设计邮件模板路径,现在设计邀请电子邮件主题行失败

转载 作者:行者123 更新时间:2023-12-04 14:45:28 26 4
gpt4 key购买 nike

我创建了一个自定义设计邮件程序来更改设计电子邮件模板在 View 中的位置。我做了以下更改:

#/config/initializers/devise
config.mailer = 'CustomDeviseMailer'


# app/mailers/customer_devise_mailer.rb
def headers_for(action, opts)
headers = {
:subject => translate(devise_mapping, action),
:from => mailer_sender(devise_mapping),
:to => resource.email,
:template_path => '/mailers/devise'
}.merge(opts)
end

现在我的电子邮件模板位于:/app/views/mailers/devise/

问题是当一个设计邀请.invite!调用电话时,电子邮件的主题行指出错误:“ translation missing: en.#<Devise::Mapping:0x007fe8fb6f4578>”。

我怀疑我需要对 /config/locales/devise_invitable.en.yml 进行调整文件。我还用 /app/controllers/invitations_controller.rb 覆盖了 Devise Invitable Controller 。 .

我应该对 devise_invitable.en.yml 进行哪些补充文件?谢谢。

最佳答案

我实现的解决方案是禁用默认的 Devise Invitable 邮件程序,而是使用我自己的邮件程序。该解决方案类似于 Devise Invitable wiki 上的“允许用户创建自定义邀请消息”指南中的解决方案。

我做了以下更改。

将配置更改为自定义邮件:

# config/initializers/devise
config.mailer = 'CustomDeviseMailer'

在您的自定义邮件程序中指定新的设计电子邮件模板路径(并将设计电子邮件模板移动到此文件夹):
# app/mailers/customer_devise_mailer.rb
def headers_for(action, opts)
super.merge!({template_path: '/mailers/devise'}) # this moves the Devise template path from /views/devise/mailer to /views/mailer/devise
end

使用命令 rails generate mailer InvitableMailer 生成一个邮件程序来处理覆盖的设计邀请电子邮件.

覆盖 Devise Invitable Controller 上的创建操作。您需要的代码将类似于以下内容。我省略了 respond_to block ,因为它是为我的应用程序定制的。
# controllers/invitations_controller.rb
class InvitationsController < Devise::InvitationsController

# POST /resource/invitation
def create
@invited_user = User.invite!(invite_params, current_inviter) do |u|
# Skip sending the default Devise Invitable e-mail
u.skip_invitation = true
end

# Set the value for :invitation_sent_at because we skip calling the Devise Invitable method deliver_invitation which normally sets this value
@invited_user.update_attribute :invitation_sent_at, Time.now.utc unless @invited_user.invitation_sent_at
# Use our own mailer to send the invitation e-mail
InvitableMailer.invite_email(@invited_user, current_user).deliver

respond_to do |format|
# your own logic here. See the default code in the Devise Invitable controller.
end
end
end

邀请 Controller 现在调用我们生成的邮件程序而不是默认邮件程序。在我们的邮件程序上添加一个发送电子邮件的方法。
# app/mailers/invitable_mailer.rb
class InvitableMailer < ActionMailer::Base
default from: "blah@blah.com"

def invite_email(invited_user, current_invitor)
@invited_user = invited_user
@current_invitor = current_invitor

# NOTE: In newever versions of Devise the token variable is :raw_invitation_token instead of :invitation_token
# I am using Devise 3.0.1
@token = @invited_user.invitation_token
@invitation_link = accept_user_invitation_url(:invitation_token => @token)

mail(to: @invited_user.email,
from: "blah@blah.com",
subject: "Invitation to SERVICE",
template_path: "/mailers/devise")
end
end

我的自定义邀请电子邮件的模板是 app/views/mailers/devise/invite_email.html.erb .在该电子邮件中,我链接到带有邀请 token 的接受邀请 URL,其中包含以下代码 <%= link_to 'Accept invitation', @invitation_link %>
另外,我添加了 attr_accessible :invitation_sent_at到我的用户模型,以便我可以更新 :invitation_sent_at attribute从邀请 Controller 。

我希望这有帮助。

关于ruby-on-rails - 更改了设计邮件模板路径,现在设计邀请电子邮件主题行失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21446631/

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