使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是啥?

Posted

技术标签:

【中文标题】使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是啥?【英文标题】:Delete active storage attachment with jquery and rerender attachments help ? and what is the best practice?使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是什么? 【发布时间】:2021-01-25 07:47:15 【问题描述】:

我正在尝试删除一个活动的存储附件,但我真的不知道如何解决它,我遇到了许多不同的错误。

错误:

NoMethodError at /rooms/10/photos/72
====================================

> undefined method `count' for nil:NilClass

app/views/photos/_photos_list.html.erb, line 1

我的代码:

查看:photo_upload.html.erb

          <div class="col-md-offset-3 col-md-12">
              <%= form_for @room do |form| %>
                <div class="form-group">
                  <%= form.file_field :photos, multiple: true, class: 'form-control'%>
                </div>
                <%= form.submit 'save', class: 'form-control btn btn-success'%>
            <% end %>
          </div>
          <div id="photos"><%= render 'photos/photos_list' %></div>

部分:照片/_photos_list.html.erb

<% if @photos.count > 0 %>
  <div class="row">
    <% @photos.each do |photo| %>
      <div class="col-md-4">
        <%= image_tag photo, width: 500, class: 'img-thumbnail' %>
        <%= link_to(room_photo_path(@room.id, photo.id), remote: true, method: :delete, data: confirm: 'are you sure') do %>
          <i class="fa fa-trash-o" area-hidden="true"></i>
        <% end %>
      </div>
    <% end %>
  </div>
<% end %>

控制器:photos_controller.html.erb

  def destroy
    @photo = ActiveStorage::Attachment.find(params[:id])
    @photo.purge
    respond_to :js
  end
end

destroy.js.erb $('#photos').html("&lt;%= j render 'photos_list' %&gt;")

型号:room.rb

  has_many_attached :photos

【问题讨论】:

【参考方案1】:

问题已修复: 在控制器中发现小错字应该是这样的: link_to(room_photo_path(photo.record_id, photo), remot...

【讨论】:

以上是关于使用 jquery 删除活动存储附件并重新渲染附件有帮助吗?最佳做法是啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何获取存储在 Rails 控制器的活动存储中的附件的 url

渲染缓冲区附件和纹理附件之间的区别

稍后删除 UITableViewCell 的附件视图?

EXCHANGE 附件问题!

Confluence 6 整合到支持的附件存储选项

Python email lib - 如何从现有邮件中删除附件?