Поле файла, которое переводится в тег <input type="file" />
, может использоваться только для приема файлов от пользователя.Невозможно отобразить какую-либо информацию о файле, который существует в файловом хранилище вашего приложения.
Что вы можете сделать, это показать информацию о уже прикрепленном файле рядом со входом,возможно на этикетке.Мой HAML очень ржавый, поэтому вот пример с использованием ERB, и предполагается, что вы используете ActiveStorage:
<div class="form-group">
<%= f.label :identity_proof do %>
<% if f.object.identity_proof.attached? %>
The currently attached file is <%= f.object.identity_proof.filename %>. Click here to replace this file.
<% else %>
No file has been uploaded yet. Please pick a file.
<% end %>
<% end %>
<%= f.file_field :identity_proof %>
</div>
Однако, это все равно оставляет сам тег ввода, который говорит Файл не выбран (или что-то подобное) все еще видимым.
Один из наиболее распространенных подходов для решения этой проблемы - сделать поле ввода невидимым (с помощью CSS), а затем стилизовать метку с помощью пользовательского CSS, чтобы он выглядел как вводполе.Поскольку метка связана с полем ввода, нажатие на нее все равно вызовет средство выбора файлов браузера.Поле ввода может быть скрыто различными способами - общий выбор - расположить метку над входом, а затем скрыть ввод, установив его непрозрачность на ноль.
Вот грубый пример.
.form-control {
position: relative;
}
.input {
position: absolute;
top: 0;
bottom: 0;
opacity: 0;
}
.btn {
border: 1px solid black;
padding: 5px;
}
И рабочая скрипка из вышеперечисленного!