在编辑视图上上传“未选择文件”的字段[活动存储]

时间:2019-05-07 17:08:05

标签: ruby-on-rails

我创建了一个简单的CRUD,并使用Google Cloud和Active Storage上传了一些图像,并且一切正常。

enter image description here

然后我为“头像”(用于一个附件)和“上传”(对于多个附件)添加了一些照片

enter image description here

问题在于,在编辑视图上,我们“未选择文件”。它至少应识别出已附加的文件数。

我可以解决它用样式表隐藏“未选择文件”并添加一些代码以显示使用ajax上传的文件数量的问题,但是有更好的解决方案吗?谢谢。

enter image description here

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

1 个答案:

答案 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

(对不起,我的英语)