Ruby on rails 更改了designe-mailer模板路径,现在designe-Invitable';s电子邮件主题行失败

Ruby on rails 更改了designe-mailer模板路径,现在designe-Invitable';s电子邮件主题行失败,ruby-on-rails,devise,devise-invitable,Ruby On Rails,Devise,Devise Invitable,我创建了一个自定义设计电子邮件程序,以更改设计电子邮件模板在视图中的位置。我做了以下修改: #/config/initializers/devise config.mailer = 'CustomDeviseMailer' 及 现在,我的电子邮件模板位于:/app/views/mailers/designe中/ 问题是什么时候一个设计不可侵犯。邀请!调用时,电子邮件的主题行声明错误:“缺少翻译:en.#设计::映射:0x007fe8fb6f4578” 我怀疑我需要对/config/locale

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

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

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

问题是什么时候一个设计不可侵犯。邀请!调用时,电子邮件的主题行声明错误:“
缺少翻译:en.#设计::映射:0x007fe8fb6f4578

我怀疑我需要对
/config/locales/designe\u invitable.en.yml
文件进行调整。我还用
/app/controllers/invitables\u controller.rb
覆盖了designe Invitable controller


我应该对
designe\u invitable.en.yml
文件添加哪些内容?谢谢。

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

我做了以下更改

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

# config/initializers/devise
config.mailer = 'CustomDeviseMailer'
在自定义邮件程序中指定新的设计电子邮件模板路径(并将设计电子邮件模板移动到此文件夹):

使用命令
rails-Generate-mailer-InvitableMailer
生成一个邮件程序来处理被重写的designe-Invitable电子邮件

覆盖设计不可修改控制器上的创建操作。您需要的代码类似于下面的代码。我省略了要阻止的响应,因为它是为我的应用程序定制的

# 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.rb
类邀请控制器<设计::邀请控制器
#职位/资源/邀请
def创建
@已邀请的用户=user.invite!(邀请参数,当前邀请者)do | u|
#跳过发送默认的设备不可修改电子邮件
u、 跳过邀请=真
结束
#设置:invitation\u sent\u at的值,因为我们跳过调用通常设置此值的designe Invitable方法deliver\u invitation
@已邀请用户。更新属性:邀请发送时间,Time.now.utc,除非@invested\u user.investment\u sent\u在
#使用我们自己的邮件发送邀请电子邮件
InvitableMailer.invitable_email(@invitated_user,current_user)。传递
回应待办事项|格式|
#你自己的逻辑在这里。请参阅设计不可修改控制器中的默认代码。
结束
结束
结束
邀请控制器现在调用生成的邮件程序,而不是默认的邮件程序。在我们的邮件程序上添加发送电子邮件的方法

# 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/mailers/invitable_mailer.rb
类InvitableMailer@token)
邮件(发送至:@invested_user.email),
来自:blah@blah.com",
主题:“服务邀请”,
模板路径:“/mailers/designe”)
结束
结束
我的自定义邀请电子邮件的模板是
app/views/mailers/designe/invite\u email.html.erb
。在该电子邮件中,我链接到接受邀请URL,并使用以下代码完成邀请令牌

此外,我还将
attr\u accessible:invitation\u sent\u at
添加到我的用户模型中,以便我可以从邀请控制器更新
:invitation\u sent\u at属性


我希望这有帮助。

你解决了这个问题吗?我也有同样的问题
# 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
# 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