Rails не передает параметр кнопки "commit"

Переустановка приложения Rails на новом сервере. Часть приложения может развиваться в одном из двух направлений на основе кнопки, которую пользователь выбирает. Эта часть не работает, и когда я смотрю на журнал, я вижу значения, которые я дал форме, execept для commit части хэша params. Похоже, что приложение работает не так, как ожидалось (поскольку в params[:commit] ничего нет, но я понятия не имею, почему коммит не будет передан, запрос, безусловно, является POST-запросом, а все остальные параметры есть.

Ответ 1

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

function disableButtonAndSubmit()
{
  var input = $("<input type='hidden' />").attr("name", $(this)[0].name).attr("value", $(this)[0].value);
  $(this).closest('form').append(input);
  $(this).attr('disabled', 'disabled').html('Loading…');
  $(this).closest('form').submit();
}

$('#somewhere button').click(disableButtonAndSubmit);

Ответ 2

Просто добавьте name: "commit", value: "Save" в форму формы отправки:

form_for @object do |f|
  ...
  f.button :submit, "Save", name: "commit", value:"Save"
end

а затем в контроллере будет params[:commit] равно "Save".

Ответ 3

Я столкнулся с этой же проблемой, и ответы здесь указали мне в правильном направлении. Однако, вместо предложений о добавлении скрытых входных данных или отказа от блока двойной отправки, вы можете просто добавить функцию setTimeout в свой двойной блок отправки с тайм-аутом в 1 миллисекунду, что позволяет блоку двойной отправки работать без предупреждения представление кнопки.

Ответ 4

Убедитесь, что ваш ввод ввода называется commit или его метка не будет отправлена.

Получаемый html должен быть:

<input type="submit" name="commit" label="...>

Ответ 5

Я несколько раз искал что-то вроде этого, когда существует несогласованность в том, как разные браузеры будут передавать значение кнопки отправки в форме. Я нашел, что единственное практическое решение заключалось в том, чтобы javascript в кнопке установил скрытое поле и использовал это значение.

Вот некоторые из моих кодов, чтобы различать сохранение и выход, который идет в одну сторону, и сохранять и продолжать, которые идут другим:

  <%= hidden_field_tag 'step_commit', '' %>
  <span style="float:left;">
    <%=submit_tag 'Cancel', :name=>'cancel', :onclick=>"javascript:location.href='/';return false;" %>
    <%=submit_tag 'Save and Exit', :name=>'exit', :onclick=>"javascript:$('step_commit').value='exit';" %>
  </span>
  <span style="float:right;">
    <%=submit_tag 'Save and Continue', :name=>'continue', :onclick=>"javascript:$('step_commit').value='continue';" %>
  </span>