Mailer kann mit "Rails Generate" generiert werden
(Password_reset
wird später verwendet)
$ rails generate mailer UserMailer account_activation password_reset
Das Produkt ist
create app/mailers/user_mailer.rb #Definieren Sie hier so etwas wie eine Aktion
invoke erb
create app/views/user_mailer
create app/views/user_mailer/account_activation.text.erb #Mail-Layout (Text)
create app/views/user_mailer/account_activation.html.erb #Mail-Layout (HTML)
ERB kann für das Layout verwendet werden
edit_account_activation_url
aufrufen *edit_account_activation_url(@user.activation_token, email: @user.email)
Und nimm zwei Argumente Gibt einen Pfad wie den folgenden zurück
/account_activations/(1. Argument)/edit?(2. Argument)
Die folgenden werden als ** Abfrageparameter ** bezeichnet Geschrieben als Schlüssel / Wert-Paar mit "? Email = ..."
Machen Sie die Ansichtsdatei mit dem obigen URL-Helfer eingebettet
** Instanzvariablen **, ** Ziel **, ** Titel **, die in Ansichtsdateien verwendet werden Definiert in app / mailers / user_mailer.rb`
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
Wenn Sie dem Verfahren folgen Sie können eine Vorschau im Browser anzeigen
Der Test ist bereits unten beschrieben
Ursache von $ Rails Test
> (ROT)
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' } #Richten Sie einen Host für die Testumgebung ein
.
.
.
end
Es sollte "$ Rails Test" sein> (GRÜN)
password_reset
bleibt fehlerhaft * assert_equal ["[email protected]"], mail.from
Nach dem Reparieren
Es wurde $ Rails Test
> (GRÜN)
Ändern Sie die Aktion "Erstellen"
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
Da sich das Verhalten ändert, wird es zu "$ Rails Test"> (ROT)
Recommended Posts