Ruby/Rails: Как вы настраиваете шаблоны почтовой рассылки Devise?
Я установил Devise для моего Rails-приложения (3.0.1), и он работает в основном. Я просто не могу настроить настройки рассылки.
- Моя пользовательская модель - "Пользователь".
- Контроллеры разработки (которые мне нужно переопределить, чтобы я мог сказать контроллерам, какой файл макета использовать) находятся в
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 по-прежнему подходит по умолчанию (как будто я никогда не редактировал файлы). Я предполагаю, что Devise по-прежнему использует файлы в камне.
В случае, если это помогает, здесь ошибка огурца:
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 "[email protected]" # 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 [email protected]!</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 "[email protected]" # 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
И приложение /views/users/confirm _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
Как исправить эту проблему?
Спасибо!
Ответы
Ответ 1
Я думаю, что вам нужно самостоятельно управлять представлениями Devise. Попробуйте следующее в консоли:
rails generate devise:views
Это сгенерирует все представления, которые использует Devise (включая шаблоны почтовых программ), которые теперь можно настраивать.
Почтовые рассылки, которые вы ищете, должны быть в 'app/views/devise/mailer'
Если вы хотите генерировать области видимости или только их подмножество, это также возможно. Согласно документации на https://github.com/plataformatec/devise#configuring-views:
Вы также можете использовать генератор для генерации областей видимости:
rails generate devise:views users
Если вы хотите сгенерировать только несколько наборов представлений, например, для регистрируемого и подтверждаемого модуля, вы можете передать список модулей генератору с флагом -v.
rails generate devise:views -v registrations confirmations
Ответ 2
Сгенерировать представления имя ресурса
rails generate devise:views users
Чтобы создать определенные представления с помощью модуля recoverable
rails generate devise:views users -v passwords
Чтобы создать только те объявления mail
rails generate devise:views users -v mailer
для более подробной информации генерировать представления
Ответ 3
согласно разработать документы
вы должны отредактировать конфигурацию /initializers/devise.rb:
config.scoped_views = true
(по умолчанию комментируется)
сделав это, вы можете настроить свои представления для разных моделей, а не для глобального проекта.
Ответ 4
Попробуйте следующее:
rails generate devise:views
Ответ 5
Если вы заинтересованы в использовании не Придумайте использование по умолчанию ActionMailer и вместо этого хотели бы посылать индивидуализированные электронные письма с API от службы, как SendGrid, Mailgun или штемпеля вам нужно будет создать собственный Mailer
, что подкласс Devise::Mailer
и замещает его методы "уведомления".
Вот пример использования Mailgun.