Rails: Предотвратить повторяющиеся записи от одновременной подачи - PullRequest
0 голосов
/ 09 сентября 2011

У нас возникла проблема с нашим приложением, позволяющим пользователям регистрироваться несколько раз с одной и той же информацией учетной записи (в частности, по электронной почте).

Наша модель пользователя проверяет уникальность параметра электронной почты, и мытакже используя некоторый javascript, чтобы удостовериться, что после нажатия кнопки «зарегистрироваться» он станет непригодным, если регистрация не удастся (теоретически, гарантируя только один щелчок).проблема заключается в том, что пользователи дважды щелкают по кнопке регистрации до того, как завершит загрузку javascript на странице.

Есть ли способ на стороне Rails, чтобы мы могли это предотвратить?Может быть, что-то, что создает стек запросов, а затем перебирает их?Я спрашиваю, потому что мы не можем быть единственным сайтом с такой проблемой.

Спасибо

Ответы [ 4 ]

2 голосов
/ 10 сентября 2011

Тупой вопрос: почему бы вам не установить поле в самой базе данных на уникальное?

Если это невозможно, сделайте то, что предложил Стив Борн, и используйте что-то вроде этого:

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

Теперь я не проверял это, поэтому настройка clicked = true может быть излишней;)

0 голосов
/ 09 сентября 2011

Не совсем уверен, что это происходит, но другой вариант - включить только кнопку отправки в функции готовности jQuery и начать со скрытой или отключенной кнопки.Вы используете большое количество JS вне функции готовности?

0 голосов
/ 09 сентября 2011

Если проблема в том, что пользователи отправляют форму до завершения загрузки вашего javascript, почему бы не сделать это невозможным?(т.е. действие кнопки отправки не отправляет форму, но ваш javascript отправляет событие click?)

Существует несколько способов предотвратить дублирование в JS;Звучит так, как будто вы уже это покрыли.

0 голосов
/ 09 сентября 2011

Установите для текстового поля значение Nothing сразу после вставки.

...