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!