2011-03-11 17 views
8

Tengo una pregunta sobre formularios. Tengo un formulario bastante estándar que guarda una publicación (llamada un eReport en mi aplicación) con un título y un cuerpo. La tabla también tiene un campo "publicado", que es booleano. El eReport guardado solo se muestra en el sitio público si este campo se establece en verdadero, siendo falso el predeterminado.2 botones de enviar en un formulario

En lugar de la casilla de verificación predeterminada, me gustaría mostrar dos botones al final del formulario: un botón "Publicar ahora" y un botón "Guardar como borrador". Si el usuario presiona el primero, el campo publicado se establecerá en verdadero. Si es este último, entonces falso. En PHP, solía mostrar 2 campos de envío con diferentes valores de nombre, luego manejaba la entrada con una instrucción if/else para determinar la consulta SQL adecuada para compilar. En Rails, asumo que colocaría esta lógica en el controlador, bajo la acción apropiada, pero no estoy seguro de cómo manipular el nombre o los valores de identificación de los botones.

Para el registro, estoy usando Formtastic, pero si alguien me puede mostrar cómo hacerlo con las etiquetas de formulario predeterminadas de Rails, también está bien. Aquí está el código para mi formulario tal como está ahora:

<% semantic_form_for @ereport do |form| %> 

    <% form.inputs do %> 
    <%= form.input :title %> 
    <%= form.input :body %> 
    <% end %> 
    <% form.buttons do %> 
    <%= form.commit_button :label => "Publish Now" %> 
<%= form.commit_button :label => "Save as Draft" %> 
    <% end %> 
<% end %> 

¡Gracias de antemano por la ayuda!

Respuesta

20

No sé sobre Formtastic, pero con los carriles predeterminados forman constructor, que podría hacerlo de esta manera:

<%= form.submit "Save with option A", :name => "save_option_a" %> 
<%= form.submit "Save with option B", :name => "save_option_b" %> 

Luego, en el controlador, se puede recoger en los params:

if params[:save_option_a] 
    # do stuff 
end 
+0

¡Gracias por la información! Eso funcionó muy bien. – joshukraine

0

Creo que necesita usar jQuery. Puede enlazar el evento de clic de botón y enviar el formulario para la ubicación especificada.

+0

Estoy empezando a aprender jQuery en estos días, pero lo tendré en cuenta. ¡Gracias! – joshukraine

1

además de @iddlefingers responden, aquí es una vista del registro de la solicitud (striping algunos params inútiles debido a propósitos de explicación)

Parameters: {"utf8"=>"✓", ..., "comentar"=>"Confirmar"} 

donde podemos ver que comentar es el nombre del parámetro, y "Confirmar" es su valor, que es también el texto del botón.

que fue obtenida por submit_tag "Confirmar", :name => 'comentar'

Así que, en general, que podría tener (si se quiere reducir el número de params que está trabajando) varias submit_tag "onevalue", :name => 'SAMEname', submit_tag "othervalue", :name => 'SAMEname' ...

y recuperarlos en su Controlador

if params[:SAMEname] == "onevalue" 
# do stuff 
elsif params[:SAMEname] == "othervalue" 
#do different stuff 
end 
Cuestiones relacionadas