web-dev-qa-db-fra.com

Ruby / Rails: Comment personnalisez-vous les modèles d'envoi de Devise?

J'ai installé Devise pour mon Rails (3.0.1) et cela fonctionne principalement. Je n'arrive pas à personnaliser les vues de l'expéditeur .

  • Mon modèle d'utilisateur est "Utilisateur".
  • Les contrôleurs de devise (que j'avais besoin de remplacer pour que je puisse dire aux contrôleurs quel fichier de disposition utiliser) sont dans app/controllers/users/, ainsi app/controllers/users/sessions_controller.rb
  • Les vues de devise (que j'ai éditées) sont dans app/views/users/ ainsi app/views/users/registrations/new.html.haml
  • Voici la portion de devise de mon fichier de routes:
 devise_for: utilisateurs,: contrôleurs => {
: sessions => "utilisateurs/sessions", 
: enregistrements => "utilisateurs/enregistrements", 
: mots de passe => "utilisateurs/mots de passe", 
: confirmations => "utilisateurs/confirmations", 
: unlocks => "utilisateurs/déverrouillages" 
} do 
 get "/ login" => "devise/sessions # new" 
 get "/ logout" => "devise/sessions # destroy" 
 end 

Tout au-dessus fonctionne, au moins. Cependant, lors de l'envoi de courrier, les modèles que Devise semble utiliser ne sont pas ceux que j'ai modifiés sur app/views/users/mailer/. Devise semble toujours récupérer celui par défaut (comme si je n'avais jamais modifié les fichiers). Je suppose que Devise utilise toujours les fichiers dans le joyau.

Au cas où cela aiderait, voici l'erreur du concombre:

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

Et app/vues/utilisateurs/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>

De plus, si cela aide, voici les contrôleurs que j'ai remplacés:

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

Comment résoudre ce problème?

Merci!

48
Ramon Tayag

Je pense que vous devrez gérer vous-même les vues Devise. Essayez ce qui suit dans une console:

Rails generate devise:views

Cela générera toutes les vues utilisées par Devise (y compris les modèles de mailers), que vous pouvez désormais personnaliser.

Les expéditeurs que vous recherchez doivent alors être dans 'app/views/devise/mailer'

Si vous souhaitez générer des vues étendues, ou seulement un sous-ensemble d'entre elles, c'est également possible. Selon la documentation sur https://github.com/plataformatec/devise#configuring-views :

Vous pouvez également utiliser le générateur pour générer des vues étendues:

Rails generate devise:views users

Si vous souhaitez générer seulement quelques ensembles de vues, comme ceux du module enregistrable et confirmable, vous pouvez passer une liste de modules au générateur avec l'indicateur -v.

Rails generate devise:views -v registrations confirmations
62
David Sulc

Pour générer des vues par nom de ressource

Rails generate devise:views users

Pour générer des vues spécifiques par module de recoverable

Rails generate devise:views users -v passwords

Pour générer spécifier uniquement les vues de courrier

Rails generate devise:views users -v mailer 

pour plus de détails générer des vues

30
akbarbin

selon documents de devise

vous devez éditer votre config/initializers/devise.rb:

config.scoped_views = true

(il est commenté par défaut)

ce faisant, vous pouvez personnaliser vos vues pour différents modèles, plutôt que pour le modèle global.

22
Brian

Si vous n'êtes pas intéressé par l'utilisation par défaut de Devise d'ActionMailer et que vous souhaitez plutôt envoyer des e-mails personnalisés avec une API à partir d'un service tel que SendGrid , Mailgun , ou Postmark vous devrez créer un Mailer personnalisé qui sous-classe Devise::Mailer et remplace ses méthodes de "notification".

Voici un exemple utilisant Mailgun .

1
Andrew Gertig