このチュートリアルを使用して、ローンチ前のサインアップ サイトを構築しています。http://railsapps.github.com/tutorial-rails-prelaunch-signup.html . ユーザーが電子メールを入力して招待をリクエストすると、ajax を使用して_thankyou.html
、オーバーライドされた Devise 登録コントローラーからレンダリングされるパーシャルをレンダリングします。
ただし、サイトはafter_create :send_welcome_email
コールバックを使用して、「招待をリクエストしていただきありがとうございます」というウェルカム メールを送信します。これにより、ajax のパフォーマンスが大幅に低下します。after_create コールバックがなければ、(少なくともローカル ホストでは) ajax は非常に高速に動作し、フォームはすぐに消え、感謝のパーシャルはほぼ瞬時にレンダリングされます。ただし、after_create コールバックを含めると、フォームが消えるまでに長い時間がかかり (ユーザーが送信ボタンを複数回クリックして、さらに多くの問題が発生します)、thankyou パーシャルにも長い時間がかかります...
お礼のパーシャルがレンダリングされた後にメールがトリガーされるように調整する方法はありますか?
新しいデバイスの作成方法
# ovverride #create to respond to AJAX with a partial
def create
build_resource
if resource.save
if resource.active_for_authentication?
sign_in(resource_name, resource)
(render(:partial => 'thankyou', :layout => false) && return) if request.xhr?
respond_with resource, :location => after_sign_up_path_for(resource)
else
expire_session_data_after_sign_in!
(render(:partial => 'thankyou', :layout => false) && return) if request.xhr?
respond_with resource, :location => after_inactive_sign_up_path_for(resource)
end
else
clean_up_passwords resource
render :action => :new, :layout => !request.xhr?
end
end
リクエストの招待送信でトリガーされる ajax。
// use AJAX to submit the "request invitation" form
$('#invitation_button').live('click', function() {
var email = $('form #user_email').val();
var password = $('form #user_password').val();
var dataString = 'user[email]='+ email + '&user[password]=' + password;
$.ajax({
type: "POST",
url: "/users",
data: dataString,
success: function(data) {
$('#request-invite').html(data);
}
});
return false;
});