我正在使用本教程构建一个预发布注册站点。http://railsapps.github.com/tutorial-rails-prelaunch-signup.html。在用户输入他们的电子邮件以请求邀请后,它使用 ajax 呈现_thankyou.html
部分内容,该部分内容是从重写的 Devise 注册控制器呈现的。
但是,该站点还使用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;
});