Ruby / Rails:你如何定制Devise的邮件模板?

我已经为我的Rails应用程序(3.0.1)安装了Devise,它主要工作。 我似乎无法自定义邮件视图

  • 我的用户模型是“用户”。
  • devise控制器(我需要覆盖,所以我可以告诉控制器什么样的布局文件使用)在app/controllers/users/ ,就像app/controllers/users/sessions_controller.rb
  • devise视图(我编辑)在app/views/users/app/views/users/registrations/new.html.haml
  • 这是我的路线文件的devise部分:
     devise_for:users,:controllers => { 
       :会话=>“用户/会话”, 
       :注册=>“用户/注册”, 
       :密码=>“用户/密码”, 
       :确认=>“用户/确认”, 
       :解锁=>“用户/解锁”
     }做
      得到“/login”=>“devise/会议#新”
      得到“/注销”=>“devise/会议#销毁”
    结束

至less上面的一切都起作用了。 但是,发送邮件时, Devise似乎使用的模板不是我在app/views/users/mailer/编辑的模板 。 devise仍然似乎拾取默认的(如果我从来没有编辑过的文件)。 我猜测Devise仍然使用gem中的文件。

如果有帮助,这里是黄瓜错误:

 Feature: Manage accounts In order to manage accounts users should be able to signup # By default, www.example.com is the host when testing. # This is a problem because when our site searches for the domain example.com, it cant find any. # Therefore we must either set our testing domain to one of our choosing (and mention that in the routes), or create a domain example.com # I prefer the first option. Scenario: Signing up and resetting the password # features/manage_accounts.feature:10 Given I am on the login page # features/step_definitions/web_steps.rb:19 When I follow "Sign up" # features/step_definitions/web_steps.rb:33 And I fill in "Login" with "bobrobcom" # features/step_definitions/web_steps.rb:39 And I fill in "Email" with "my@email.com" # features/step_definitions/web_steps.rb:39 And I fill in "Password" with "123456" # features/step_definitions/web_steps.rb:39 And I fill in "Password confirmation" with "123456" # features/step_definitions/web_steps.rb:39 And I press "Sign up" # features/step_definitions/web_steps.rb:27 Then I should see "Your account has been created. A confirmation was sent to your e-mail." # features/step_definitions/web_steps.rb:107 And I should receive an email # features/step_definitions/email_steps.rb:51 When I open the email # features/step_definitions/email_steps.rb:72 Then I should see "Welcome bobrobcom!" in the email body # features/step_definitions/email_steps.rb:96 expected "<p>Welcome my@email.com!</p>\n\n<p>You can confirm your account through the link below:</p>\n\n<p><a href=\"http://stils.dev/users/confirmation?confirmation_token=d9ZXliqfTArb2cNmwPzL\">Confirm my account</a></p>\n" to include "Welcome bobrobcom!" (RSpec::Expectations::ExpectationNotMetError) ./features/step_definitions/email_steps.rb:97:in `/^(?:I|they) should see "([^"]*?)" in the email body$/' features/manage_accounts.feature:21:in `Then I should see "Welcome bobrobcom!" in the email body' When I follow "Confirm my account" # features/step_definitions/web_steps.rb:33 Then I should see "Your account was successfully confirmed. You are now signed in." # features/step_definitions/web_steps.rb:107 When I log out # features/step_definitions/user_steps.rb:9 And I go to the reset password page # features/step_definitions/web_steps.rb:23 And I fill in "Email" with "my@email.com" # features/step_definitions/web_steps.rb:39 And I press "Send me reset password instructions" # features/step_definitions/web_steps.rb:27 Then I should see "You will receive an email with instructions about how to reset your password in a few minutes." # features/step_definitions/web_steps.rb:107 And I should receive an email # features/step_definitions/email_steps.rb:51 When I open the email # features/step_definitions/email_steps.rb:72 Then I should see "Hello bobrobcom!" in the email body # features/step_definitions/email_steps.rb:96 When I follow "Change my password" in the email # features/step_definitions/email_steps.rb:166 Then I should see "Set your new password" # features/step_definitions/web_steps.rb:107 Failing Scenarios: cucumber features/manage_accounts.feature:10 # Scenario: Signing up and resetting the password 

和app / views / users / confirmation_instructions.erb:

 <p>Welcome <%= @resource.login %>!</p> <p>You can confirm your account through the link below:</p> <p><%= link_to 'Confirm my account', confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %></p> 

另外,如果有帮助,这里是我重写的控制器:

 | | |~users/ | | | |-confirmations_controller.rb | | | |-passwords_controller.rb | | | |-registrations_controller.rb | | | |-sessions_controller.rb | | | `-unlocks_controller.rb 

我该如何解决这个问题?

谢谢!

我想你需要自己pipe理Devise视图。 在控制台中尝试以下操作:

 rails generate devise:views 

这将生成devise所使用的所有视图(包括邮件模板),您现在可以自定义这些视图。

你正在寻找的邮件应该在'app / views / devise / mailer'

根据devise的文档

你应该编辑你的config / initializers / devise.rb:

 config.scoped_views = true 

(它被默认注释)

通过这样做,您可以为不同的模型定制您的视图,而不是全局devise。

资源名称生成视图

 rails generate devise:views users 

通过recoverable模块生成指定的视图

 rails generate devise:views users -v passwords 

仅生成指定的邮件视图

 rails generate devise:views users -v mailer 

获取更多细节生成视图

尝试这个:

 rails generate devise:views