Rails 3: форма отправляется дважды - PullRequest
7 голосов
/ 07 января 2011

Я занимаюсь разработкой приложения на Rails, в котором формы создаются с помощью formtastic.Я занимаюсь разработкой и тестированием локально, то есть на локальном хосте: 3000 с Ruby-1.9.2, Rails-3.0.1, jQuery и AJAX.

Ниже приведен пример вывода на экран проблемы, которую я вижу.Мои формы отправляются дважды в течение 1 секунды друг от друга.Я не могу понять, почему это происходит.Я вижу эту проблему со всеми запросами - включая GET.

  1. Запущено POST "/ enterprises / 6 / edit_balance" для 127.0.0.1 в 2011-01-07 02: 31: 47 +0530 ОбработкаBuseriesController # edit_balance как JS Параметры: {"utf8" => "✓", "authenticity_token" => "zcWH08sV8kPbAYy7JQX64Cu2e1i / kEB1AB4x5a08CO8 ="

  2. нач. / 6-й редакции "Started"для 127.0.0.1 в 2011-01-07 02: 31: 48 +0530 Обработка с помощью BuseriesController # edit_balance as JS Параметры: {"utf8" => "✓", "authenticity_token" => "zcWH08sV8kPbAYy7JQX64Cu2e1i /kEB1AB4x5a08CO8 = "

И поэтому мне интересно, совершаю ли я базовую программную ошибку.Если да, то не могли бы вы предложить несколько решений, которые я мог бы попробовать.

Ответы [ 3 ]

8 голосов
/ 31 января 2012

У меня возникла такая же проблема сразу после развертывания в Heroku ... Я предварительно скомпилировал свои активы, и внезапно я получил двойные представления AJAX. Я думаю, что я каким-то образом получил дубликаты файлов javascript в public / assets.

Чтобы исправить проблему, я просто удалил весь каталог public / assets.

1 голос
/ 07 января 2011

Если вы отправляете форму с помощью Javascript, попробуйте отключить кнопку отправки при отправке формы.С jQuery это было бы что-то вроде этого (не проверено):

$('form').submit(function(){
  $(this).find(input[type='submit']).attr("disabled", "true");
  ... // submit form via AJAX
  return false;
});
0 голосов
/ 07 января 2011

Спасибо PolarBlau .. Позвольте мне попробовать ваше предложение ..

Apnediving: Ниже приведены фрагменты кода, которые: 1. создают форму (часть формы) 2. определяют диалог, в котором находится форма (часть диалога) и 3. JS, который присоединяет действие к форме.

Форма Частичная (credits_form)

- f.inputs :name => 'Edit Credits' do 
  = f.input :numeric_input_1, :label => 'Amount', :as => :select, :collection => [1000,2000,3000] 
  = f.input :boolean_input_1, :label => 'Add Credits'
  = f.commit_button :label => 'Submit' 

Диалог Частичный

# редактирование-кредиты-диалог

- @user_input = UserInput.new

 = semantic_form_for @user_input, :remote => true do |f|     
 = render :partial => 'businesses/credit_form', :locals => {:f => f}

Код JS

$.getJSON('/businesses/' + id + '/load_credits', function(data) { 
    var form = $('#edit-credits-dialog form') ; 

    form.attr('action', '/businesses/' + id + '/edit_balance') ; <-- seems to be happening twice
    $('#edit-credits-dialog').dialog('open') ; <--- happens once 
}) ; 
...