我已经为我的Rails应用程序(3.0.1)安装了Devise,它主要工作。我只是似乎无法自定义邮件程序视图。
app/controllers/users/
中,如此app/controllers/users/sessions_controller.rb
app/views/users/
一样app/views/users/registrations/new.html.haml
devise_for :users, :controllers => { :sessions => "users/sessions", :registrations => "users/registrations", :passwords => "users/passwords", :confirmations => "users/confirmations", :unlocks => "users/unlocks" } do get "/login" => "devise/sessions#new" get "/logout" => "devise/sessions#destroy" end
至少在上面的一切都有效。但是,在发送邮件时, Devise似乎使用的模板不是我在app/views/users/mailer/
编辑的模板。设计似乎仍然是默认的(好像我从未编辑过文件)。我猜测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
如何解决此问题?
谢谢!
答案 0 :(得分:62)
我认为您需要自己管理Devise视图。在控制台中尝试以下操作:
rails generate devise:views
这将生成Devise使用的所有视图(包括邮件程序模板),您现在可以自定义它们。
您正在寻找的邮件应该是'app / views / devise / mailer'
如果您想生成范围内的视图,或者只想生成其中一部分视图。根据{{3}}的文档:
您还可以使用生成器生成范围视图:
rails generate devise:views users
如果您只想生成几组视图,例如可注册和可确认模块的视图,您可以使用-v标志将模块列表传递给生成器。
rails generate devise:views -v registrations confirmations
答案 1 :(得分:30)
按资源名称
生成视图rails generate devise:views users
通过recoverable
rails generate devise:views users -v passwords
仅生成指定邮件视图
rails generate devise:views users -v mailer
了解更多详情generate views
答案 2 :(得分:22)
你应该编辑你的config / initializers / devise.rb:
config.scoped_views = true
(默认情况下注释)
通过这样做,您可以为不同的模型而不是全局设计自定义视图。答案 3 :(得分:1)
如果您有兴趣不使用Devise的ActionMailer默认用法,而是想通过SendGrid,Mailgun或Postmark之类的服务使用API发送自定义电子邮件,则可以需要创建一个自定义Mailer
的子类,该子类继承Devise::Mailer
并覆盖其“通知”方法。
答案 4 :(得分:0)
试试这个:
rails generate devise:views
答案 5 :(得分:0)
如果您只想生成电子邮件视图,则可以使用:rails g devise:views [SCOPE] -v mailer
。您的情况下的[SCOPE]
是users
。
注意:我正在使用Devise 4.7.3
。