Как я могу сделать check_box_tag, чтобы публиковать параметр 'false' или '0', когда не отмечен?

Со следующим check_box_tag:

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

Я могу обновить boolean_attribute только в одном направлении: от false до true.

Когда по умолчанию флажок снят (поскольку object.boolean_attribute имеет значение false), я проверяю его и затем отправляю форму, a: boolean_attribute = & gt; 1 параметр опубликован.

But, когда я пытаюсь обновить с true на false, никакие параметры не передаются, поэтому boolean_attribute остается true.

Другими словами, когда установлен флажок по умолчанию (потому что object.boolean_attribute имеет значение true), и я снимаю флажок и затем отправляю форму, a: boolean_attribute = & gt; 0 этоnot вывешенный.

Как я могу сделать этот check_box_tag, чтобы опубликовать: boolean_attribute = & gt; 0 параметр когда не проверен?

Из API я не могу понять, есть ли какой-то вариант, чтобы легко его достичь: http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-check_box_tag

Спасибо.

EDIT

По какой-то причине я не могу понять, в моем реальном коде (с вложенной ассоциацией «многие ко многим») hidden_field_tag не работает.

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

Теперь у меня возникла противоположная проблема: я могу снять флажок, и подготовка обновляется в соответствии с требованиями, но если я установлю флажок, он испортит параметры.

Вот опубликованные параметры для непроверенной коробки:

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

Теперь посмотрим, что за беспорядок, когда я поставлю галочку, начиная с "cooked" = & gt; & quot; & quot ;, по какой-то причине Rails слишком рано закрывает хэш prepare_attributes!

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

Я думаю, что столкнулся с ошибкой Rails, связанной с глубоко вложенными формами ресурсов и передачей параметров:https://github.com/rails/rails/issues/5937

На данный момент я сделал это для работы с select_tag:

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

Я думаю, что переключение на select_tag, чтобы избежать "скрытого поля, полученного" это приемлемый обходной путь.

В любом случае, спасибо за ответы!

Ответы на вопрос(5)

Ваш ответ на вопрос