У вас там две проблемы
Ваш сборник возвращает некоторые нулевые элементы (как сказал Джозеф), в этом случае атрибут name равен нулю, поэтому вы можете проверить это на сборнике
Решение (компактное) [ОБНОВЛЕНИЕ]
f.select(:doc, file.all.collect {|a| [a.name, a.id] if a.name, include_hidden: false }.compact, {}, id: "id-select2", class: "form-control", :multiple => true)
Укажите опцию include_blank https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-select
f.select(:doc, file.all.collect {|a| [a.name, a.id] if a.name }.compact, { include_blank: false, include_hidden: false }, id: "id-select2", class: "form-control", :multiple => true)
В соответствии с документами для выберите помощника Я нашел эту ошибку
В спецификации HTML говорится, что для выбора нескольких параметров
и все параметры отменены, веб-браузеры не отправляют значения
сервер. К сожалению, это вводит в заблуждение: если модель пользователя имеет
много ролей и имеют роль access_ids, а также в редактируемой форме
роли пользователя пользователь отменяет выбор всех ролей из role_ids
установите флажок, параметр role_ids не отправляется. Итак, любое массовое назначение
идиома, как для предотвращения этого помощник генерирует вспомогательные скрытые
поле перед каждым множественным выбором. Скрытое поле имеет то же имя
как множественный выбор и пустое значение.
Примечание : клиент отправляет только скрытое поле (представляющее
снимите флажок множественного выбора) или оба поля. Это означает, что
Полученный массив всегда содержит пустую строку.
Если вы не хотите, чтобы помощник генерировал это скрытое поле, вы
можно указать опцию include_hidden: false.
Так что, если вы добавите параметр include_hidden: false , вы не получите пустую строку для вашего параметра множественного числа, когда данные будут отправлены в контроллер.