В документации по rails API есть полезное объяснение отсутствующих параметров и обходного пути скрытого поля:
http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box
check_box (имя_объекта, метод, параметры = {},check_value = "1", unchecked_value = "0")
Возвращает тег флажка, предназначенный для доступа к указанному атрибуту (идентифицированному методом) для объекта, назначенного шаблону (идентифицируемого объектом).Этот объект должен быть объектом экземпляра (@object), а не локальным объектом.Предполагается, что метод возвращает целое число, и если это число выше нуля, то флажок установлен.Дополнительные параметры входного тега могут быть переданы в виде хэша с параметрами.Check_value по умолчанию равно 1, а unchecked_value по умолчанию установлено в 0, что удобно для логических значений.Получено
Спецификация HTML гласит, что снятые флажки не установлены, и поэтому веб-браузеры их не отправляют.К сожалению, это вводит принцип: если модель Invoice имеет оплаченный флаг и в форме, которая редактирует оплаченный счет, пользователь снимает флажок, оплаченный параметр не отправляется.Таким образом, любая идиома массового назначения, например
@invoice.update_attributes (params [: invoice])
не будет обновлять флаг.
Чтобы предотвратить это, помощник генерируетвспомогательное скрытое поле перед самим флажком.Скрытое поле имеет то же имя, и его атрибуты имитируют непроверенный флажок.
Таким образом, клиент отправляет только скрытое поле (представляющее флажок не проверено) или оба поля.Поскольку в спецификации HTML говорится, что пары ключ / значение должны отправляться в том же порядке, в котором они появляются в форме, а извлечение параметров получает последнее вхождение любого повторяющегося ключа в строке запроса, что работает для обычных форм.