Jak mogę zrobić check_box_tag, aby opublikować parametr „false” lub „0”, gdy odznaczone?

Z następującym tagiem check_box_tag:

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

Mogę zaktualizować atrybut boolean tylko w jednym kierunku: od false do true.

Gdy domyślnie nie jest zaznaczone (ponieważ obiekt.boolean_attribute jest fałszywy) i sprawdzam go, a następnie przesyłam formularz, publikowany jest parametr: boolean_attribute => 1.

Ale, gdy próbuję aktualizować z true na false, nie przekazuje się parametru, więc atrybut boolean_attribute pozostaje prawdziwy.

Innymi słowy, kiedy jest domyślnie zaznaczone (ponieważ atrybut object.boolean_attribute jest prawdziwy) i odznaczam go, a następnie przesyłam formularz, a: boolean_attribute => 0 tonie opublikowane.

Jak mogę uczynić ten check_box_tag, aby po odznaczeniu zamieścić parametr: boolean_attribute => 0?

Z api nie mogę się zorientować, czy jest jakaś opcja, aby łatwo to osiągnąć:http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

Dziękuję Ci.

EDYTOWAĆ

Z jakiegoś powodu, którego nie mogę pojąć, w moim rzeczywistym kodzie (z zagnieżdżonym powiązaniem wielu do wielu) tag hidden_field_tag ​​nie działa.

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

Teraz mam odwrotny problem: mogę odznaczyć pole wyboru, a przygotowanie zostanie zaktualizowane w aspekcie, ale jeśli zaznaczę to pole wyboru, spowoduje to zwiększenie parametrów.

Oto opublikowane parametry dla niezaznaczonego pola:

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

Teraz zobacz, co za bałagan, gdy zaznaczam pole wyboru, zaczynając od „cooked” => „”, z jakiegoś powodu Railsy zbyt wcześnie zamykają hash przygotowywania_prezentacji!

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

EDYCJA # 2:

Myślę, że wpadłem na błąd Railsów związany z głęboko zagnieżdżonymi formularzami zasobów i przekazywaniem param:https://github.com/rails/rails/issues/5937

Na razie udało mi się pracować z tagiem select_tag:

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

Myślę, że przejście na select_tag w celu uniknięcia „ukrytego pola” jest dopuszczalnym obejściem.

W każdym razie dziękuję za odpowiedzi!

questionAnswers(5)

yourAnswerToTheQuestion