Rails:防止同时提交的重复输入

时间:2011-09-09 18:37:29

标签: ruby-on-rails queue duplicates

我们的应用程序遇到问题,允许用户使用相同的帐户信息(特别是电子邮件)多次注册。

我们的用户模型验证了电子邮件参数的唯一性,我们还使用了一些javascript来确保点击“注册”按钮后,除非注册失败(理论上只确保一次点击),否则它将无法使用)。

出现问题源于用户在页面上的javascript完成之前双击注册按钮

Rails方面是否有办法阻止这种情况?也许是创建请求堆栈然后遍历它们的东西?我问,因为我们不能成为唯一有此问题的网站。

由于

4 个答案:

答案 0 :(得分:2)

愚蠢的问题:为什么不将数据库本身的字段设置为唯一?

如果无法做到这一点,请按照史蒂夫伯恩的建议行事,并使用以下内容:

var clicked = false;
$('#submit_button').click( function() {
  $(this).preventDefault();
  if(!clicked) {
    clicked = true;
    $('#submit_button').attr('disabled','disabled');
    $('#form').submit();
}

现在,我没有测试过,因此设置clicked = true可能有点矫枉过正;)

答案 1 :(得分:0)

插入后立即将文本字段设置为Nothing。

答案 2 :(得分:0)

并不完全相信正在发生的事情,但另一种选择是只在jQuery的ready函数中启用提交按钮,并从隐藏或禁用它开始。你是否在准备好的功能之外运行了大量的JS?

答案 3 :(得分:0)

如果问题是用户在javascript加载完之前提交表单,为什么不让那个不可能? (即提交按钮操作不提交表单,但您的javascript在点击事件上提交?)

有几种方法可以防止JS中的欺骗;听起来你已经有了这个。