Mailer peut être généré avec rails generate
(Password_reset
sera utilisé plus tard)
$ rails generate mailer UserMailer account_activation password_reset
Le produit est
create app/mailers/user_mailer.rb #Définissez quelque chose comme une action ici
invoke erb
create app/views/user_mailer
create app/views/user_mailer/account_activation.text.erb #Mise en page du courrier (texte)
create app/views/user_mailer/account_activation.html.erb #Mise en page du courrier (html)
ERB peut être utilisé pour la mise en page
edit_account_activation_url(@user.activation_token, email: @user.email)
Et prends deux arguments Renvoie un chemin comme celui-ci
/account_activations/(1er argument)/edit?(2ème argument)
Les éléments suivants sont appelés ** paramètres de requête **
Écrit comme une paire clé / valeur avec ? Email = ...
Le fichier de vue doit avoir l'assistant d'URL ci-dessus intégré
** Variables d'instance **, ** Destination **, ** Titre ** utilisées dans les fichiers de vue Défini dans app / mailers / user_mailer.rb`
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
Si vous suivez la procédure Vous pourrez prévisualiser dans le navigateur
Le test est déjà décrit ci-dessous
Cause de $ rails test
> (ROUGE)
test/mailers/user_mailer_test.rb
require 'test_helper'
class UserMailerTest < ActionMailer::TestCase
test "account_activation" do
mail = UserMailer.account_activation
assert_equal "Account activation", mail.subject
assert_equal ["[email protected]"], mail.to
assert_equal ["[email protected]"], mail.from
assert_match "Hi", mail.body.encoded
end
.
.
.
end
config/environments/test.rb
Rails.application.configure do
.
.
.
config.action_mailer.delivery_method = :test
config.action_mailer.default_url_options = { host: 'example.com' } #Configurer un hôte pour l'environnement de test
.
.
.
end
Ce devrait être $ rails test
> (VERT)
password_reset
reste un échec * assert_equal ["[email protected]"], mail.from
Après la fixation
Il est devenu $ rails test
> (VERT)
Changer l'action create
--Envoyer un mail avec ʻUserMailer.account_activation (@user) ` --Modifier le message flash
def create
@user = User.new(user_params)
if @user.save
UserMailer.account_activation(@user).deliver_now
flash[:info] = "Please check your email to activate your account."
redirect_to root_url
else
render 'new'
end
end
Puisque le comportement change, il devient $ rails test
> (RED)
Recommended Posts