私のアプリには、ユーザーが自分のメールアドレスを入力してリクエストを送信する簡単なサインアップがあります。次に、リクエストは AJAX を使用して私のサーバーに送信され、ActionMailer を使用して電子メールがユーザーの電子メールに送信され、jQuery を使用してお礼のメッセージがレンダリングされます。私が現在持っているコードでは、お礼メッセージは電子メールが送信された後にのみレンダリングされるため、お礼メッセージが表示されるまでに時間がかかります。ただし、お礼のメッセージを最初にレンダリングし、バックグラウンドでユーザーに電子メールを送信して、ユーザーが電子メールが保存されたことをすぐに認識できるようにしたいと考えています。Rails を使用してバックグラウンドで電子メールを処理する方法はありますか?
以下は私の現在のコードです。users_controller.rb 内
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
format.html { redirect_to @user, notice: 'Thank you for signing up!' }
format.js
format.json { render json: @user, status: :created, location: @user }
Notifier.email_saved(@user).deliver
else
format.html { render action: "new" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
end
mailers/notifier.rb 内
class Notifier < ActionMailer::Base
default from: "First Last <my@email.com>"
def email_saved(user)
@email = user.email
mail to: @email, subject: 'Auto-Response: Thank you for signing up'
end
end
users/create.js.erb 内
$("<div class='alert alert-success'>Thank you for showing your interest! A confirmation email will be sent to you shortly.</div>").insertAfter("#notice");