Мне удалось сопоставить флажок с меткой следующим образом:
В чекбоксе:
Я использовал check_box_tag, указав конкретное имя элемента (роль здесь) в качестве индекса массива, чтобы получить идентификатор со значением в нем. Я передал значение хэша: name, чтобы переопределить имя, указанное в check_box_tag, чтобы оно не имело идентификатор:
check_box_tag "user[roles][#{role.to_s}]", role.to_s, @user.has_role?(role), :name => "user[roles][]"
, который генерирует следующий HTML-код:
<input id="user_roles_ROLE1" name="user[roles][]" type="checkbox" value="ROLE1" />
В метке я указал идентификатор, используя имя массива + '_' плюс имя элемента (роль здесь), чтобы правильно указать идентификатор в метке:
label_tag "user_roles_#{role}", cur_role.role_name, :class => 'span_after_label'
, который генерирует следующий HTML:
<label class="span_after_label" for="user_roles_ROLE1">User</label>
Когда PUT отправляется на контроллер, параметры имеют следующие поля:
"user"=>{ ..., "roles"=>["ROLE1", "ROLE2", "ROLE3"], ... }
это имена ролей для всех проверенных ролей.
Таким образом, для вашего кода я бы попробовал следующее:
check_box_tag "test_case_id[#{test_case.id}]", "#{test_case.id}", test_case.id, :name => "test_case_id[]"