Рубрики
Ruby on Rails

Чекбоксы для Rails

Задача. Сделать чекбоксы для формы
Особенности. Множественный выбор, возможность оставить чекбосы пустыми (не выбирая ничего)

<% current_sizes = [] %>
<% current_sizes = JSON.parse @style.sizes.gsub('=>', ':') if @style.sizes %>
# "[\"\", \"B\", \"G\", \"H\"]" => ["", "B", "G", "H"]
# [""] Если не выбраны значения 
<%= hidden_field_tag "sizes[]", nil %>
<% @style.sizes.split(",").each do |size| %>
  <%= check_box_tag 'sizes[]', size, (true if current_sizes.include?(size)) %>
<% end %>Code language: Ruby (ruby)

Первая строка.
Сначала получаем текущее значения для чек бокса. Можно инициализировать начальное значение для current_sizes
Что бы не получать ошибку связаную с недопустимостью использования метода sizes для nil

<% current_sizes = [] %>Code language: HTML, XML (xml)

В моем случае форма передавалась с помощью метода GET если у нас раньше были выбраны значения и мы решили убрать их, то параметер вообще не будет передаваться. Что бы это избежать мы всегда будем передавать nil в скрытом поле

В @style.sizes храниться строка, с помощью метода split(«,») разбиваем ее на массив.
Затем проходимся по каждому элементу в массиве
В вашем случае возможно другая структура данных

В базу данных сохраняется строка sizes: «[\»\», \»B\», \»G\», \»H\»]» , которую мы легко конвертируем хеш, с помощью метода JSON.parse описанном в самом начале.

Этот способ не является идеальным, буду рад если вы поделитись своим решением в комментарии к данной статье

Полезные ссылки
По ссылке ниже в документации так же передается скрытое поле, но в несколько другом формате. Предлагается генерировать скрытое поле для каждого check_box, что бы передовать значения 0 или 1. Как вы понимаете 1 если значение у чекбокса есть, 0 если чекбокс не был выбран
В комментраниях вы так же найдете реализацию множественных чекбоксов. check_box

Вторая ссылка на check_box_tag

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *