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