2010-01-04 8 views
11

Reinstalación de la aplicación Rails en un servidor nuevo. Parte de la aplicación puede bifurcarse en una de dos direcciones según el botón que el usuario seleccione. Esta parte no funciona, y cuando miro el registro veo los valores que di el formulario, excepto para la porción commit del hash de parámetros. Parece que esta es la razón por la que la aplicación no funciona como se esperaba (dado que no hay nada en params[:commit], pero no tengo idea de por qué no se transfirió la confirmación, la solicitud es definitivamente una solicitud POST y todos los demás parámetros están ahí.Rails no pasa el parámetro del botón "confirmar"

+0

¿Ya ha encontrado una solución? Tengo un problema similar desde que actualicé mi plantilla con una de mi diseñador web. Use una plantilla 'básica' y todo es archivo, pero use la plantilla de diseñadores (HTML válido) y no obtengo valores de compromiso. –

+3

En mi caso, fue debido a tener una ventana emergente jQuery antes de enviar el formulario. –

+2

Gracias por ese comentario Wayne, eso me avisó de lo que causó esto para mí. En mi caso, teníamos un enlace genérico jQuery submit event que deshabilitaba el botón enviar (para evitar los envíos dobles). Eliminar eso de esta forma solucionó las cosas. – chrisrbailey

Respuesta

7

tenía un problema de simular con una función de desactivación de botones-en-presentar. Lo solucionamos agregando un campo de entrada oculto con el mismo nombre y valor antes de enviar el formulario.

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

Intenté algo así como hace un rato, cuando hay inconsistencia en la forma en que diferentes navegadores pasarían el valor de un botón de enviar en un formulario. Encontré que la única solución práctica era tener javascript en el botón para establecer un campo oculto, y utilizar este valor en vez

, aquí tienes mi código para diferenciar entre una guardar y salir, que va por un lado, y guardar y continuar el cual vaya por otro:.

<%= 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

Lo raro es que funcionaba bien en el servidor anterior, pero ahora lo movimos y se detuvo. –

1

Comprueba que tu entrada de envío se llame commit o que no se envíe su etiqueta.

el código HTML resultante debe ser:

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

Me encontré con este mismo problema, y ​​las respuestas aquí me orientaron en la dirección correcta. Sin embargo, en lugar de las sugerencias de agregar entradas de formularios ocultos o renunciar al bloque de envío doble, simplemente puede agregar una función setTimeout en su bloque de envío doble con un tiempo de espera de 1 milisegundo, lo que permite que el bloque de envío doble funcione sin impedir la presentación del botón.

+0

Esa fue la solución que necesitaba. ¡Gracias! –

5

Sólo tiene que añadir name: "commit", value: "Save" a su formulario botón de envío:

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

y entonces tendrá params[:commit] es igual a "Save" en el controlador.

Cuestiones relacionadas