Wie kann ich ein check_box_tag erstellen, um einen 'false'- oder' 0'-Parameter zu posten, wenn das Kontrollkästchen deaktiviert ist?

Mit folgendem check_box_tag:

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

Ich kann das boolean_attribute nur in eine Richtung aktualisieren: von false nach true.

Wenn das Kontrollkästchen standardmäßig deaktiviert ist (weil object.boolean_attribute false ist) und ich es überprüfe und dann das Formular abschicke, wird der Parameter: boolean_attribute => 1 gesendet.

AberWenn ich versuche, von true nach false zu aktualisieren, wird kein Parameter übergeben, sodass das boolean_attribute true bleibt.

Mit anderen Worten, wenn standardmäßig aktiviert ist (weil object.boolean_attribute true ist) und ich das Häkchen entferne und dann das Formular abschicke, ist a: boolean_attribute => 0nicht Gesendet.

Wie kann ich mit diesem check_box_tag einen: boolean_attribute => 0-Parameter einstellen, wenn das Kontrollkästchen deaktiviert ist?

Über die API kann ich nicht herausfinden, ob es eine Option gibt, die übergeben werden muss, um es einfach zu erreichen:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

Vielen Dank.

BEARBEITEN

Aus irgendeinem Grund kann ich nicht verstehen, dass der hidden_field_tag ​​in meinem tatsächlichen Code (mit einer verschachtelten Many-to-Many-Assoziation) nicht funktioniert.

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

Jetzt habe ich das gegenteilige Problem: Ich kann das Kontrollkästchen deaktivieren und die Vorbereitung wird wie vorgesehen aktualisiert, aber wenn ich das Kontrollkästchen aktiviere, werden die Parameter durcheinander gebracht.

Hier sind die geposteten Parameter für das deaktivierte Kästchen:

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

Sehen Sie jetzt, was für ein Durcheinander, wenn ich das Kontrollkästchen beginnend mit "cooked" => "" aktiviere. Aus irgendeinem Grund schließt Rails den Preparation_attributes-Hash zu früh!

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

EDIT # 2:

Ich glaube, ich bin auf einen Rails-Fehler gestoßen, der mit tief verschachtelten Ressourcenformen und Parameterübergabe zusammenhängt:https://github.com/rails/rails/issues/5937

Im Moment habe ich es geschafft, mit einem select_tag zu arbeiten:

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

Ich denke, dass das Wechseln zu einem select_tag, um das "hidden_field gotcha" zu vermeiden, eine akzeptable Problemumgehung ist.

Trotzdem danke für die Antworten!

Antworten auf die Frage(5)

Ihre Antwort auf die Frage