Как я могу отправить массив флажков таким образом, чтобы для каждого элемента в массиве было одно (но только одно) значение?

#ruby-on-rails

#ruby-on-rails

Вопрос:

Я выполняю инструкцию SQL в своем контроллере:

 @lots = execute_statement("select date_trunc ('day', filled_at) as Fill_Date, shift_id, count(id) from liquor_lots where available = true group by date_trunc ('day', filled_at), shift_id order by Fill_Date")
 

На мой взгляд, я перебираю строки результирующего набора и генерирую массив каждого элемента

 <%= form_with(url: add_path, method: "post") do |form| %>
<% @lots.each do |row| %>
    
    <tr>
        <td><%= form.text_field :fill_date, value:row['fill_date'], name: "fill_date[]" %></td>
        
        <td><%= form.text_field :shift_id, value:row['shift_id'], name: "shift_id[]" %></td>
        
        <td><%= form.check_box :all_pallets, name: "all_pallets[]"  %></td>
        
    </tr>
 

Мне нужно выполнить логику для первых двух параметров ( fill_date и shift_id ), если флажок установлен. Итак, мой план состоит в том, чтобы пройти через all_pallets параметр, и если он выбран, я получу доступ к данным в других массивах, используя индекс.

Контроллер:

   all_pallets = params["all_pallets"]
  filled_dates = params["fill_date"]
  shift_ids = params["shift_id"]
  all_pallets.each_with_index do |pallet, index|
       #pseudo-code
       if pallet is selected, perform logic based on filled_dates[index] and shift_ids[index]
 

Моя проблема в том, что если я использую check_box , я получаю ‘0’ для каждого флажка плюс ‘1’ для всех флажков.
Если я использую check_box_tag , я получаю только ‘1’ для выбранных строк и никаких элементов для непроверенных полей.
Мне нужно иметь 0 для непроверенных и 1 для проверенных, но общее количество элементов в массиве должно соответствовать другим массивам.

Например, если мой исходный запрос вернул 5 строк, и я установил 2 флажка:

с check_box_tag помощью параметров = "...shift_id"=>["2", "1", "1", "2", "3"], "all_pallets"=>["1", "1"],

с check_box помощью параметров = "...shift_id"=>["2", "1", "1", "2", "3"], "all_pallets"=>["0", "0", "1", "0", "1", "0", "0"]

и что мне нужно, так это "...shift_id"=>["2", "1", "1", "2", "3"], "all_pallets"=>["0", "1", "0", "1", "0"]

Как это можно сделать?

Комментарии:

1. Я думаю, вы можете попробовать form.check_box :all_pallets, {}, "true", "false" . Проверьте консоль в браузере, чтобы убедиться, что созданы правильные входные данные.

2. Генерация входных данных не является проблемой. Это отправленные параметры, которые я не могу получить правильно.