2010-01-04 3 views
11

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

+0

Вы нашли решение? У меня возникла аналогичная проблема, так как я обновил свой шаблон одним из своих веб-дизайнеров. Используйте шаблон «basic», и все это файл, но используйте шаблон конструктора (HTML valid), и я не получаю значения фиксации. –

+3

В моем случае это произошло из-за наличия всплывающего окна jQuery перед отправкой формы. –

+2

Спасибо за этот комментарий Уэйн, это подтолкнуло меня к тому, что вызвало это для меня. В моем случае у нас была общая привязка события отправки jQuery, которая отключила кнопку отправки (чтобы избежать двойных подчинений). Удаление из этой формы фиксированных вещей. – chrisrbailey

ответ

7

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

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); 
0

Я искал что-то вроде этого некоторое время назад, когда существует несогласованность в том, как разные браузеры будут передавать значение кнопки отправки в форме. Я нашел единственное практическое решение: иметь 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> 
+0

Странно, что он отлично работал на старом сервере, но мы просто переместили его сейчас, и он остановился. –

1

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

Результирующий HTML должен быть:

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

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

+0

Это было просто решение, в котором я нуждался. Благодаря! –

5

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

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

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