覆盖 Devise Invitable `invite!` 方法以将附件添加到邀请电子邮件 - Rails
Override Devise Invitable `invite!` method in order to add attachment to invitation email - Rails
我有 devise_invitable
gem 和一个邀请控制器 InvitationsController < Devise::InvitationsController
。我从 gem.
使用此方法 User.invite!(user, inviter)
邀请我的用户
现在,我想在此邀请中添加 pdf 附件,但我无法覆盖邮件程序方法来执行以下操作:attachments['terms.pdf'] = File.read('/path/terms.pdf')
.
我的邀请电子邮件工作正常,我想保持原样,但带有附件。
这是我的 routes.rb
:
devise_for :users, controllers: { invitations: 'api/v1/users/invitations' }
我错过了什么?
谢谢
Devise_Invitable 有一个有用的 skip_invitation
选项。
使用以下方法,您可以轻松地使用自己的邮件程序并在其中添加附件:
def invite_and_notify_user(email)
user = User.invite!({ email: email }) do |u|
u.skip_invitation = true
end
notify_by_email(user)
end
def notify_by_email(user)
MyUserMailer.invited_user_email(user).deliver
end
在 UserMailer 中 class:
def invited_user_email(user)
@user = user
attachments['terms.pdf'] = File.read('/path/terms.pdf')
mail(to: user.email, from: 'contact@mail.com', subject: "Your subject")
end
您可以像这样覆盖设计邮件程序...
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
# If there is an object in your application that returns a contact email, you can use it as follows
# Note that Devise passes a Devise::Mailer object to your proc, hence the parameter throwaway (*).
default from: ->(*) { Class.instance.email_address }
end
然后您可以在 config/initializers/devise.rb
中将 config.mailer
设置为“MyMailer”。请注意,这会覆盖用于所有设计模块的邮件程序。
然后在 class 中将您的附件添加到 invited_user_instructions...
def invited_user_instructions(*args)
attachments['terms.pdf'] = File.read('/path/terms/pdf')
super
end
这是设计说明https://github.com/heartcombo/devise/wiki/How-To:-Use-custom-mailer
我有 devise_invitable
gem 和一个邀请控制器 InvitationsController < Devise::InvitationsController
。我从 gem.
User.invite!(user, inviter)
邀请我的用户
现在,我想在此邀请中添加 pdf 附件,但我无法覆盖邮件程序方法来执行以下操作:attachments['terms.pdf'] = File.read('/path/terms.pdf')
.
我的邀请电子邮件工作正常,我想保持原样,但带有附件。
这是我的 routes.rb
:
devise_for :users, controllers: { invitations: 'api/v1/users/invitations' }
我错过了什么?
谢谢
Devise_Invitable 有一个有用的 skip_invitation
选项。
使用以下方法,您可以轻松地使用自己的邮件程序并在其中添加附件:
def invite_and_notify_user(email)
user = User.invite!({ email: email }) do |u|
u.skip_invitation = true
end
notify_by_email(user)
end
def notify_by_email(user)
MyUserMailer.invited_user_email(user).deliver
end
在 UserMailer 中 class:
def invited_user_email(user)
@user = user
attachments['terms.pdf'] = File.read('/path/terms.pdf')
mail(to: user.email, from: 'contact@mail.com', subject: "Your subject")
end
您可以像这样覆盖设计邮件程序...
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
# If there is an object in your application that returns a contact email, you can use it as follows
# Note that Devise passes a Devise::Mailer object to your proc, hence the parameter throwaway (*).
default from: ->(*) { Class.instance.email_address }
end
然后您可以在 config/initializers/devise.rb
中将 config.mailer
设置为“MyMailer”。请注意,这会覆盖用于所有设计模块的邮件程序。
然后在 class 中将您的附件添加到 invited_user_instructions...
def invited_user_instructions(*args)
attachments['terms.pdf'] = File.read('/path/terms/pdf')
super
end
这是设计说明https://github.com/heartcombo/devise/wiki/How-To:-Use-custom-mailer