Con el siguiente check_box_tag:¿Cómo puedo hacer que check_box_tag publique un parámetro 'falso' o '0' cuando no está marcado?
<%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
puedo actualizar el boolean_attribute en una sola dirección: de falso a verdadero.
Cuando está desmarcado de forma predeterminada (porque object.boolean_attribute es falso) y lo compruebo y luego envío el formulario, se publica un parámetro: boolean_attribute => 1.
Pero, cuando intento actualizar de verdadero a falso, no se pasa ningún parámetro, por lo que el atributo boolean_attribute sigue siendo verdadero.
En otras palabras, cuando está marcada por defecto (porque object.boolean_attribute es cierto) y la desactiva y luego enviar el formulario, a: boolean_attribute => 0 es no publicado.
¿Cómo puedo hacer que check_box_tag publique un parámetro: boolean_attribute => 0 cuando está desmarcado?
de la API no puedo averiguar si hay alguna opción para pasar a lograr fácilmente: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag
Gracias.
EDITAR
Por alguna razón no puedo comprender, en mi código real (con una asociación muchos-a-muchos anidado) la hidden_field_tag no está funcionando.
<%= hidden_field_tag 'order[preparations_attributes][][cooked]', nil %>
<%= check_box_tag 'order[preparations_attributes][][cooked]', '1', preparation.cooked? %>
ahora tengo el problema opuesto: Puedo desactive la casilla de verificación y la preparación se actualiza como aspectado, pero si marca la casilla de verificación se mete hasta los parametros.
Éstos son los parametros sobre la casilla sin marcar:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>"", "recipe_id"=>"9", "id"=>"86", "quantities_attributes"=>[{"ingredient_id"=>"", "qty"=>"", "_destroy"=>"0"}, {"ingredient_id"=>"11", "qty"=>"5.0", "id"=>"193", "_destroy"=>"0"}], "_destroy"=>"0"}], "add_preparation"=>{"recipe_id"=>""}}, "continue"=>"Confirm", "id"=>"31"}
Ahora ver lo que es un lío cuando compruebo la casilla de verificación, a partir de "cocido" =>"", por alguna razón los rieles está cerrando los preparation_attributes hash demasiado temprano!
Parameters: {"utf8"=>"✓", "authenticity_token"=>"bGgPGbk+Cuk2q+LEgqetmk4e7xie8dB3iMP9Cj3SUm0=", "order"=>{"customer_name"=>"Duccio Armenise", "duedate"=>"2012-04-25 09:24:00.000000", "preparations_attributes"=>[{"quantity"=>"1", "description"=>"custom recipe", "kind"=>"custom", "cooked"=>""}, {"cooked"=>"1", "recipe_id"=>"9", "id"=>"86", "quantities_attributes"=>[{"ingredient_id"=>"", "qty"=>"", "_destroy"=>"0"}, {"ingredient_id"=>"11", "qty"=>"5.0", "id"=>"193", "_destroy"=>"0"}], "_destroy"=>"0"}], "add_preparation"=>{"recipe_id"=>""}}, "continue"=>"Confirm", "id"=>"31"}
editar # 2:
Creo que me encontré con un error rieles en relación con las formas de recursos anidados de profundidad y que pasa param: https://github.com/rails/rails/issues/5937
Por el momento llegué a trabajar con un select_tag :
<%= select_tag 'order[preparations_attributes][][cooked]', options_for_select({yes: 1, no: 0}, preparation.cooked? ? 1 : 0) %>
creo que el cambio a una select_tag con el fin de evitar la "Gotcha hidden_field" es un una solución aceptable.
De todos modos, gracias por las respuestas!
Gracias, pero estaba buscando una solución check_box_tag porque en mi código actual estoy actualizando un recurso anidado. Ver mi código real en la edición. ¿Es la solución aplicable a un formulario de recursos anidados también? – Darme
Sí, ¡es adecuado! Nada le impide pasar algo como ''orden [preparados_atribuciones] [] [cocido] '' en lugar de''objeto''. – jdoe
Por el momento, hice una solución alternativa al cambiar a una solución select_tag (ver EDIT # 2), pero voy a probar tu sugerencia también ... – Darme