Как получить массив значений из группы флажков в Ruby on Rails?

Я новичок в Rails и не понимаю, как решить эту проблему.

У меня есть 2 сущности: Player и Call Up; Отношения Н:М. Таким образом, у призыва есть идентификатор, некоторые атрибуты (например, противники, дата...) и список игроков.

В новой форме вызова я добавил таблицу игроков, которых можно включить. В каждой строке есть флажок с соответствующим идентификатором игрока. Вот вид:

<%= form_with(model: call_up) do |form| %>
<!--Call Up Informations-->
<!---->
  <table class="table">
    <thead>
      <tr>
        <th colspan="5"></th>
      </tr>
    </thead>
    <tbody>
      <% @players.each do |player| %>
        <tr>
          <td><%=player.first_name %></td>
          <td><%=player.last_name %></td>
          <td><%=player.number %></td>
          <td><%=player.role %></td>
          <div class="field">
            <td><%=form.check_box :player_ids, class: "form-check-input", value: player.id %></td>
          </div>
        </tr>
      <% end %>
    </tbody>
  </table>

  <br>

  <div class="actions text-center">
    <%= form.submit "Create Call Up", class: "btn btn-dark" %>
  </div>
<% end %>

В контроллере я попытался получить массив идентификаторов игроков с помощью params[:player_ids], но это привело к нулевой ошибке. Может кто-нибудь мне помочь?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
22
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Иногда нам очень помогает копание в исходном коде, особенно когда руководство непонятно. Взгляните на все параметры check_box

def check_box(object_name, method, options = {}, checked_value = "1", unchecked_value = "0")
  Tags::CheckBox.new(object_name, method, self, checked_value, unchecked_value, options). 
end

Здесь ваш form.check_box под form_with объекта, поэтому object_name — это имя этого объекта call_up, method вот какие параметры объекта вы хотите опубликовать player_ids, checked_value и unchecked_value — это значения этих параметров, когда пользователь отправляет форму, они будут отправлены как альтернативный проверенный/неотмеченный массив каждого флажка [0, 1, 0, 1, ...], если вы просто хотите отправлять только отмеченные значения, просто установите unchecked_value = nil.

<td><%=form.check_box :player_ids, {multiple: true, skip_default_ids: false, class: "form-check-input"}, player.id, nil %></td>

Еще одна вещь, ваш контроллер получит параметры has object_name => {..., method: [...]}, поэтому вам нужно permit этот массив:

def call_up_params
  params.require(:call_up).permit(:name, player_ids: [])
end

Другие вопросы по теме