我在我的Rails应用程序中使用Devise进行身份验证。
在我的registrations_controller
中,我有一个像这样的变量:
class RegistrationsController < Devise::RegistrationsController
def create
foo = "bar"
super
end
end
然后在我的自定义邮件中,尝试访问foo
变量。 opts
参数似乎是值得关注的参数:
class CustomMailer < Devise::Mailer
helper :application
include Devise::Controllers::UrlHelpers
def confirmation_instructions(record, token, opts={})
Rails.logger.error opts[:foo].inspect
super
end
end
但是如何在不覆盖许多方法的情况下继续传递foo
变量?
答案 0 :(得分:0)
首先,阅读有关Devise custom mailer的知识,以熟悉该过程。
简而言之,这就是您要做的事情:
在config / initializers / devise.rb中:
config.mailer = "DeviseMailer"
现在,您可以像处理项目中其他任何邮件程序一样使用DeviseMailer:
class DeviseMailer < 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
...
def confirmation_instructions(record, token, opts={})
headers["Custom-header"] = "Bar"
opts[:from] = 'my_custom_from@domain.com'
opts[:reply_to] = 'my_custom_from@domain.com'
super
end
...
end
您现在可以在项目中调用confirmation_instructions
,并在模板中传递希望访问的任何变量。
即:
调用confirmation_instructions
方法:
DeviseMailer.confirmation_instructions(User.first, "faketoken", {})
confirmation_instructions.html.erb
<p> And then override the template according to you. <p>
希望这会对您有所帮助:)