我是铁杆新手,我试图自定义验证。
我已完成自定义确认邮件视图app/views/devise/mailer/confirmation_instructions.html.erb
,如下所示:
<p>Welcome <%= @email %>!</p>
<p>
Thanks for registering. You have registered through <%= @resource.provider %>.
The account data has been created automatically as follows:
</p>
<ul>
<li><strong>User Name:</strong> <%= @resource.name %></li>
<li><strong>Password:</strong> <%= @resource.password %></li>
</ul>
<p>You can confirm your account email through the link below:</p>
<p><%= link_to 'Confirm my account', confirmation_url(@resource, confirmation_token: @token) %></p>
@resource.provider
会返回'facebook'
,'twitter'
,'github'
等字符串。
如果我想自定义这些字符串,请说打印'Facebook'
,'Twitter'
,'GitHub'
...,我应该怎么做?我的第一个想法是方法
def print_cool_provider(provider)
if provider == 'facebook'
return 'Facebook'
else if ...
...
end
end
我考虑一个有限的可能提供商的简短列表,我可以逐个处理。我对MVC,Rails和Devise的真正问题更多:
我应该在哪里定义此方法以尊重MVC模式,同时能够从confirmation_instructions.html.erb
模板调用它?
答案 0 :(得分:1)
您可以添加一个简单的帮助器,如下所示:
# app/helpers/provider_helper.rb
module ProviderHelper
# only special cases, where #titlecase won't suffice
PROVIDER_NAMES = {
'github' => 'GitHub',
'google_oauth2' => 'Google'
}
def provider_name(user)
PROVIDER_NAMES[user.provider] || user.provider.titlecase
end
end
更好的方法会是a presenter(或装饰者)。
N.B。:我不会通过电子邮件提交密码,除非它已加密。