¿Cómo puedo hacer un check_box_tag para publicar un parámetro 'falso' o '0' cuando no esté marcado?

Con el siguiente check_box_tag:

<code><%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
</code>

Puedo actualizar el boolean_attribute en una sola dirección: de falso a verdadero.

Cuando está desactivado de forma predeterminada (porque object.boolean_attribute es falso) y lo verifico y luego envío el formulario, se publica un parámetro: boolean_attribute => 1.

Pero, cuando trato de actualizar de verdadero a falso, no se pasa ningún parámetro, por lo que el atributo booleano sigue siendo verdadero.

En otras palabras, cuando se marca de forma predeterminada (porque object.boolean_attribute es verdadero) y lo desactivo y luego envío el formulario, a: boolean_attribute => 0 esno al corriente.

¿Cómo puedo hacer que este check_box_tag publique un parámetro: boolean_attribute => 0 cuando no esté marcado?

Desde la API no puedo averiguar si hay alguna opción para pasar para lograrlo fácilmente:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

Gracias.

EDITAR

Por alguna razón no puedo entender, en mi código real (con una asociación anidada de muchos a muchos) el hidden_field_tag ​​no funciona.

<code><%= hidden_field_tag 'order[preparations_attributes][][cooked]', nil %>
<%= check_box_tag 'order[preparations_attributes][][cooked]', '1', preparation.cooked? %>
</code>

Ahora tengo el problema opuesto: puedo desmarcar la casilla de verificación y la preparación se actualiza como si se tratara de un aspecto, pero si selecciono la casilla de verificación, esto confunde los parámetros.

Aquí están los parámetros publicados para la casilla sin marcar:

<code>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"}
</code>

Ahora vea qué desorden cuando selecciono la casilla de verificación, comenzando desde "cooked" => "", ¡por alguna razón, Rails está cerrando el hash de la preparación de los atributos demasiado pronto!

<code>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"}
</code>

EDITAR # 2:

Creo que me topé con un error de Rails relacionado con los formularios de recursos anidados profundos y el paso de parámetros:https://github.com/rails/rails/issues/5937

Por ahora lo hice para trabajar con un select_tag:

<code><%= select_tag 'order[preparations_attributes][][cooked]', options_for_select({yes: 1, no: 0}, preparation.cooked? ? 1 : 0) %> 
</code>

Creo que cambiar a un select_tag para evitar el "hidden_field gotcha" es una solución aceptable.

De todos modos, gracias por las respuestas!

Respuestas a la pregunta(5)

Su respuesta a la pregunta