你在正確的道路上。
我添加了一個簡化和一個改進:
- 使用
super
委派工作的其餘回到設計的最初實現
- 使用
opts#delete
,以避免在OPTS值獲得的電子郵件標題自動設置(設計默認)。
app/mailers/my_devise_mailer.rb
class MyDeviseMailer < 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={})
@is_photographer = opts.delete(:photographer)
super
end
end
現在,該視圖可以使用@is_photographer
。
app/views/devise/mailer/confirmation_instructions.html.erb
<% if @is_photographer %>
<p>Welcome photographer <%= @email %>!</p>
<% else %>
<p>Welcome <%= @email %>!</p>
<% end %>
也許,一個更簡單的方法是,以避免創建MyDeviseMailer
一起,只是把is_photographer?
作爲一個屬性閱讀器或方法上User
直接使用它在色器件郵件模板關閉@resource的。
app/models/user.rb
class User
...
def is_photographer?
...
end
# or
attr_reader :is_photographer?
# or
attr_accessor :is_photographer?
end
app/views/devise/mailer/confirmation_instructions.html.erb
<% if @resource.is_photographer? %>
<p>Welcome photographer <%= @email %>!</p>
<% else %>
<p>Welcome <%= @email %>!</p>
<% end %>
此外,此選項給你的權力,以輕鬆User
添加額外的屬性或方法,包括他們在郵件模板信息提供他們真正屬於User
模型。對於不屬於的屬性,定製您自己的MyDeviseMailer
的第一個選項將有所幫助。如果存在用戶歸屬屬性和非用戶歸屬屬性的混合,則也可以將兩個選項結合起來。
我希望這能回答你的問題。讓我知道你是否需要進一步的幫助或對此有進一步的問題。
Andy Maleh