Check_box_tag с действием click_tag click

<%= f.label :category %><br/>
<%= check_box_tag 'category[]', '1', false %>
<%= label_tag 'community', 'community', class: 'category_select', value: '1' %>
<%= check_box_tag 'category[]', '2', false %>
<%= label_tag 'food', 'food', class: 'category_select', value: '2' %>
<%= check_box_tag 'category[]', '3', false %>
<%= label_tag 'music', 'music', class: 'category_select', value: '3' %><br/>
<%= check_box_tag 'category[]', '4', false %>
<%= label_tag 'education', 'education', class: 'category_select', value: '4' %>
<%= check_box_tag 'category[]', '5', false %>
<%= label_tag 'theatre', 'theatre', class: 'category_select', value: '5' %>
<%= check_box_tag 'category[]', '6', false %>
<%= label_tag 'art', 'art', class: 'category_select', value: '6' %><br/>
<%= check_box_tag 'category[]', '7', false %>
<%= label_tag 'culture', 'culture', class: 'category_select', value: '7' %>
<%= check_box_tag 'category[]', '8', false %>
<%= label_tag 'family', 'family', class: 'category_select', value: '8' %>
<%= check_box_tag 'category[]', '9', false %>
<%= label_tag 'sports', 'sports', class: 'category_select', value: '9' %><br/>

Я хочу, чтобы эти параметры отображались в моем контроллере в массиве category, поэтому я назвал все параметры category[]. То, что я хотел бы выполнить, состоит в том, чтобы поля label_tag и check_box_tag знали друг о друге:

<%= check_box_tag 'community', 'community', false %>
<%= label_tag 'community', 'community', class: 'category_select' %>

здесь, если я нажимаю на слова, поле также проверяется. Я попытался выполнить это со значениями на label_tag, но он, похоже, не работает. Можно ли это сделать?

Ответ 1

Один из способов сделать это - добавить элементы label вручную (no erb) и добавить флажки и содержимое ярлыков в качестве детей:

<label class="category-select">
  <%= check_box_tag 'category[]', '1', false %>
  Community
</label>
...

Хотя это немного меняет структуру html и может повлиять на ваш макет/css.

Ответ 2

Хорошо, я довольно поздно, чтобы ответить на это. Я искал решение для той же самой проблемы и придумал следующее:

<%= label_tag "some_name", raw("#{check_box_tag('some_name')} Click label to check") %>

Это создаст html следующим образом:

<label for="some_name"><input id="some_name" name="some_name" type="checkbox" value="1"> Click label to check</label>