Со следующим check_box_tag:
<%= check_box_tag 'object[boolean_attribute]', 1, object.boolean_attribute %>
Я могу обновить boolean_attribute только в одном направлении: от false до true.
Если флажок отмечен по умолчанию (потому что object.boolean_attribute является ложным), и я проверяю его, а затем отправляю форму, отправляется a: boolean_attribute = > 1.
Но, когда я пытаюсь обновить от true до false, параметр не передается, поэтому значение boolean_attribute остается верным.
Другими словами, когда проверяется по умолчанию (потому что object.boolean_attribute истинно), и я сниму его, а затем отправлю форму, a: boolean_attribute = > 0 отправлено not.
Как я могу сделать этот check_box_tag для публикации параметра a: boolean_attribute = > 0 при снятии флажка?
Из api я не могу понять, есть ли какой-то вариант, чтобы легко его достичь: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag
Спасибо.
ИЗМЕНИТЬ
По какой-то причине я не могу понять, в моем фактическом коде (с вложенной связью "многие-ко-многим" ) hidden_field_tag не работает.
<%= hidden_field_tag 'order[preparations_attributes][][cooked]', nil %>
<%= check_box_tag 'order[preparations_attributes][][cooked]', '1', preparation.cooked? %>
Теперь у меня есть противоположная проблема: я могу снять флажок, и подготовка обновляется как аспектированная, но если я поставлю флажок, это испортит параметры.
Здесь размещены параметры для отмеченного флажка:
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"}
Теперь посмотрим, какой беспорядок, когда я устанавливаю флажок, начиная с "cooked" = > "", по какой-то причине Rails закрывает хеш prep_attributes слишком рано!
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"}
РЕДАКТИРОВАТЬ № 2:
Я думаю, что я столкнулся с ошибкой Rails, связанной с глубокими вложенными формами ресурсов и передачей param: https://github.com/rails/rails/issues/5937
Теперь я сделал это для работы с select_tag:
<%= select_tag 'order[preparations_attributes][][cooked]', options_for_select({yes: 1, no: 0}, preparation.cooked? ? 1 : 0) %>
Я думаю, что переход на select_tag во избежание "hidden_field gotcha" является приемлемым обходным решением.
В любом случае, спасибо за ответы!