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