Почему Rails образуют множественное число?

Я играю с ActiveStorage и пытаюсь загрузить некоторые файлы локально. Все отлично работает с кодом ниже, но только если я удалю multiple: true из формы. Когда это находится в форме, я получаю непропущенную ошибку param "files" в консоли. Недопустимый параметр исходит из того, как форма передает хэш.

Без multiple: true хэш перечисляет вложения в виде массива (это рабочая версия): "article"=>{"files"=>[#<ActionDispatch::Http::UploadedFile:0x007fb4e8e287f0

Но с включенным он удаляет массив: "article"=>{"files"=>#<ActionDispatch::Http::UploadedFile:0x007fb4eb07b7d0

Что вызывает поведение этой формы и как я могу это исправить?

Я получил пример кода от Engine Yard и вот код проекта:

<h3>Attach files to this post</h3>
<%= form_with model: @article, local: true do |f|  %>
    <div class="form-row">
        <%= f.label :file_upload, 'Attach a file' %>
        <%= f.file_field :files, multiple: true %>
    </div>

    <%= f.submit %>
<% end %>

<h3>Attached files</h3>
<% @article.files.each do |file| %>
    <%= link_to file.blob.filename, url_for(file) %>
<% end %>

1 ответ

Решение

Когда вы используете multiple: true you need to permit an array explicit in the article_params за :files:

Например:

params.require(:article).permit(:author, :text, files: [])

You can read more under Action Controller

Удачи!

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