Переустановка приложения Rails на новый сервер. Часть приложения может развиваться в одном из двух направлений на основе кнопки, которую пользователь выбирает. Эта часть не работает, и когда я смотрю на журнал, я вижу значения, которые я дал форме, execept для части хэша params. Похоже, что приложение работает не так, как ожидалось (поскольку в params[:commit]
ничего нет, но я понятия не имею, почему commit не будет передан, запрос, безусловно, является POST-запросом, и все остальные параметры есть.Rails не передает параметр кнопки «commit»
ответ
Если бы Двойники проблемы с функцией отключения кнопки-на-кнопку. Мы решили это, добавив скрытое поле ввода с тем же именем и значением перед отправкой формы.
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);
Я искал что-то вроде этого некоторое время назад, когда существует несогласованность в том, как разные браузеры будут передавать значение кнопки отправки в форме. Я нашел единственное практическое решение: иметь 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>
Странно, что он отлично работал на старом сервере, но мы просто переместили его сейчас, и он остановился. –
Проверьте, что ваш вход для отправки называется commit или его метка не будет отправлена.
Результирующий HTML должен быть:
<input type="submit" name="commit" label="...>
Я столкнулся с этой проблемой, и ответы здесь указали мне в правильном направлении. Однако, вместо предложений о добавлении скрытых входных данных или отказа от блока двойной отправки, вы можете просто добавить функцию setTimeout в свой двойной блок отправки с тайм-аутом в 1 миллисекунду, что позволяет блоку двойной отправки работать без предупреждения представление кнопки.
Это было просто решение, в котором я нуждался. Благодаря! –
Просто добавьте name: "commit", value: "Save"
в форму кнопку отправки:
form_for @object do |f|
...
f.button :submit, "Save", name: "commit", value:"Save"
end
и тогда вы будете иметь params[:commit]
равно "Save"
в контроллере.
Вы нашли решение? У меня возникла аналогичная проблема, так как я обновил свой шаблон одним из своих веб-дизайнеров. Используйте шаблон «basic», и все это файл, но используйте шаблон конструктора (HTML valid), и я не получаю значения фиксации. –
В моем случае это произошло из-за наличия всплывающего окна jQuery перед отправкой формы. –
Спасибо за этот комментарий Уэйн, это подтолкнуло меня к тому, что вызвало это для меня. В моем случае у нас была общая привязка события отправки jQuery, которая отключила кнопку отправки (чтобы избежать двойных подчинений). Удаление из этой формы фиксированных вещей. – chrisrbailey