Ruby / Rails: Как вы настраиваете почтовые шаблоны Devise? - PullRequest
48 голосов
/ 25 ноября 2010

Я установил Devise для своего приложения 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 по-прежнему выбирает стандартный (как будто я никогда не редактировал файлы). Я предполагаю, что Devise все еще использует файлы в геме.

Если это поможет, вот ошибка Cucumber:

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 / translation_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

Как мне исправить эту проблему?

Спасибо!

Ответы [ 5 ]

62 голосов
/ 26 ноября 2010

Я думаю, вам нужно самостоятельно управлять представлениями 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
30 голосов
/ 10 марта 2016

Для генерации представлений по имени ресурса

rails generate devise:views users

Для генерации заданных представлений по модулю из recoverable

rails generate devise:views users -v passwords

Кгенерировать указать почта только просмотры

rails generate devise:views users -v mailer 

для получения более подробной информации генерировать просмотры

22 голосов
/ 25 октября 2012

в соответствии с документами devise

вы должны отредактировать ваш config / initializers / devise.rb:

config.scoped_views = true

(по умолчанию это комментируется)

тем самым вы можете настраивать свои представления для разных моделей, а не для глобального устройства.

1 голос
/ 29 января 2019

Если вы заинтересованы в том, чтобы не использовать Devise по умолчанию в ActionMailer, и вместо этого хотели бы отправлять настраиваемые электронные письма с API-интерфейсом из такой службы, как SendGrid , Mailgun или Отметьте , вам нужно будет создать пользовательский Mailer, который подклассов Devise::Mailer и переопределяет его методы «уведомления».

Вот пример с использованием Mailgun .

0 голосов
/ 03 декабря 2010

Попробуйте это:

rails generate devise:views
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...