私はこのチュートリアルで事前開始サイトを構築しています。 http://railsapps.github.com/tutorial-rails-prelaunch-signup.html。ユーザーが招待状を要求する電子メールを入力すると、ajaxを使って_thankyou.html
が部分的にレンダリングされ、オーバーライドされたDevise登録コントローラーからレンダリングされます。Rails:after_createによりajaxでパフォーマンスの問題が発生する
ただし、このサイトでは、after_create :send_welcome_email
コールバックを使用して、「招待状を送信しました」という歓迎メールを送信しています。これにより、ajaxのパフォーマンスが大幅に低下します。 after_createコールバックがなければ、ajax(少なくともローカルホスト上)は非常に高速に動作し、フォームはすばやく消え、感謝の部分はほとんど即座にレンダリングされます。しかし、after_createコールバックを含めるとフォームが消えるまでに長い時間がかかります(ユーザーに送信ボタンを何度もクリックさせて問題が増えます)。
感謝のあなたの部分がレンダリングされた後に電子メールが引き起こされるように物事を整理する方法はありますか?
新しい工夫が法
# 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;
});