我创建了一个简单的CRUD,并使用Google Cloud和Active Storage上传了一些图像,并且一切正常。
然后我为“头像”(用于一个附件)和“上传”(对于多个附件)添加了一些照片
问题在于,在编辑视图上,我们“未选择文件”。它至少应识别出已附加的文件数。
我可以解决它用样式表隐藏“未选择文件”并添加一些代码以显示使用ajax上传的文件数量的问题,但是有更好的解决方案吗?谢谢。
form.html.erb
<%= form_with(model: todo, local: true) do |form| %>
<% if todo.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(todo.errors.count, "error") %> prohibited this todo from being saved:</h2>
<ul>
<% todo.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="field">
<%= form.label :task %>
<%= form.text_field :task %>
</div>
<div class="field">
<%= form.label :picture %>
<%= form.file_field :picture %>
</div>
<div class="field">
<%= form.label :uploads %>
<%= form.file_field :uploads, multiple: true %>
</div>
<div class="actions">
<%= form.submit %>
</div>
<% end %>
todo.rb
class Todo < ApplicationRecord
has_one_attached :picture
has_many_attached :uploads
end
答案 0 :(得分:1)
您可以使用if语句显示所有上传内容,并使用一个按钮删除每个上传内容。 (表格之外)
赞:
form.html.erb
<% if @todo.uploads.present? %>
<div class="row">
<% @todo.uploads.each do |upload| %>
<div class="col-sm-2">
<%= image_tag url_for(upload), size: "100x80" %>
<br>
<%= link_to "Delete Image", todo_image_upload_path(@todo, upload), method: :delete, class: "btn btn-sm btn-outline-danger", data: { confirm: "Delete this image?" } %>
</div>
<% end %>
</div>
<% end %>
...
<%= form_with(model: todo, local: true) do |form| %>
...
因此,为图像生成一个控制器。
image_uploads_controller.rb
class ImageUploadsController < ApplicationController
def destroy
@todo = Todo.find(params[:todo_id])
@todo.uploads.find(params[:id]).purge_later
redirect_to edit_todo_path(@todo), notice: "Image deleted successfully"
end
end
记住要更新您的路线。
routes.rb
resources :todo do
resources :image_uploads, only: [:destroy]
end
(对不起,我的英语)