Como posso fazer um check_box_tag para postar um parâmetro 'false' ou '0' quando desmarcado?

Com a seguinte check_box_tag:

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

Eu posso atualizar o boolean_attribute em apenas uma direção: de false para true.

Quando está desmarcada por padrão (porque object.boolean_attribute é false) e eu a marquei e enviei o formulário, um parâmetro: boolean_attribute => 1 foi postado.

Mas, quando tento atualizar de true para false nenhum parâmetro é passado, então o boolean_attribute permanece verdadeiro.

Em outras palavras, quando é marcado por padrão (porque object.boolean_attribute é true) e eu desmarco-o e, em seguida, envio o formulário, a: boolean_attribute => 0 énão postou.

Como posso fazer este check_box_tag para postar um parâmetro: boolean_attribute => 0 quando desmarcado?

A partir da API não consigo descobrir se há alguma opção para passar facilmente para alcançá-lo:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

Obrigado.

EDITAR

Por alguma razão eu não consigo entender, no meu código atual (com uma associação muitos-para-muitos aninhada) o hidden_field_tag ​​não está funcionando.

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

Agora eu tenho o problema oposto: posso desmarcar a caixa de seleção e a preparação é atualizada como aspectada, mas se eu marcar a caixa de seleção, ela estraga os parâmetros.

Aqui estão os parâmetros publicados para a caixa desmarcada:

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

Agora, veja que bagunça quando eu marque a caixa de seleção, começando de "cooked" => "", por alguma razão, o Rails está fechando o hash de preparation_attributes muito cedo!

<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:

Acho que me deparei com um bug do Rails relacionado a formulários de recursos aninhados e passagem de parâmetros:https://github.com/rails/rails/issues/5937

Por agora eu fiz isso para trabalhar com um select_tag:

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

Acho que mudar para um select_tag para evitar o "hidden_field gotcha" é uma solução aceitável.

De qualquer forma, obrigado pelas respostas!

questionAnswers(5)

yourAnswerToTheQuestion