Rails 5.2 Active Storage 清除/删除附件

2024-01-27

因此,我使用 Active Storage 上传附加到集合模型的多个图像。一切正常,除非我尝试从集合中清除/删除单个附件。

问题:由于某种原因,每当我加载集合的显示页面时,我的所有图像都会立即被清除/删除。当然,我只想在单击链接时删除文件。有谁知道如何解决这个问题?

我的收藏展示视图:

<div id="gallery">
  <% @collection.images.each do |image| %>
    <%= image_tag(image) %>
    <%= link_to 'Remove image', image.purge %>
  <% end %>
</div>

我读过有关的文档http://edgeguides.rubyonrails.org/active_storage_overview.html#removing-files http://edgeguides.rubyonrails.org/active_storage_overview.html#removing-files(见第4段)

但遗憾的是,这没有提供任何有关如何具体使用 purge 或 purge_later 方法的信息。

EDIT目前我的代码已更改为以下内容(遗憾的是仍然不起作用):

<div id="gallery">
  <% @collection.images.each do |image| %>
    <%= image_tag(image) %>
    <%= link_to 'Remove', delete_image_attachment_collections_url(image.signed_id),
                method: :delete,
                data: { confirm: 'Are you sure?' } %>
    <% end %>
</div>

在我的 collections_controller.rb 中

  def delete_image_attachment
    @image = ActiveStorage::Blob.find_signed(params[:id])
    @image.purge
    redirect_to root_path
  end

在我尝试删除附加图像后,这给了我这个错误:

服务器日志:

Started DELETE "/collections/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBYdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3e75276d414b4c2040e02cf0afbc083e2337faa0/delete_image_attachment" for ::1 at 2018-03-29 19:06:55 +0200
Processing by CollectionsController#delete_image_attachment as HTML
  Parameters: {"authenticity_token"=>"60zIkeknxRYp/sJIWNwF+BrEftYHSCQvak34h8FkadPXgVPQSXN/sCoxI/6FU+jZbqQitES81fyqkmIx6XYp6w==", "id"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBYdz09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--3e75276d414b4c2040e02cf0afbc083e2337faa0"}
  ActiveStorage::Blob Load (0.1ms)  SELECT  "active_storage_blobs".* FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1 LIMIT $2  [["id", 90], ["LIMIT", 1]]
  ↳ app/controllers/collections_controller.rb:69
  Disk Storage (0.1ms) Deleted file from key: 8wpzqPQcWYjK2rVEejcU88FB
  Disk Storage (0.0ms) Deleted files by key prefix: variants/8wpzqPQcWYjK2rVEejcU88FB/
   (0.0ms)  BEGIN
  ↳ app/controllers/collections_controller.rb:70
  ActiveStorage::Blob Destroy (0.2ms)  DELETE FROM "active_storage_blobs" WHERE "active_storage_blobs"."id" = $1  [["id", 90]]
  ↳ app/controllers/collections_controller.rb:70
   (2.0ms)  COMMIT
  ↳ app/controllers/collections_controller.rb:70
  ActiveStorage::Attachment Load (0.2ms)  SELECT  "active_storage_attachments".* FROM "active_storage_attachments" WHERE "active_storage_attachments"."record_id" = $1 AND "active_storage_attachments"."record_type" = $2 AND "active_storage_attachments"."name" = $3 LIMIT $4  [["record_id", 90], ["record_type", "ActiveStorage::Blob"], ["name", "preview_image"], ["LIMIT", 1]]
  ↳ app/controllers/collections_controller.rb:70
Redirected to http://localhost:3000/
Completed 302 Found in 5ms (ActiveRecord: 2.5ms)

输出rake routes:

                            Prefix Verb   URI Pattern                                                                              Controller#Action
                              root GET    /                                                                                        home#index
                             about GET    /about(.:format)                                                                         pages#about
                           contact GET    /contact(.:format)                                                                       pages#contact
                          settings GET    /settings(.:format)                                                                  settings#edit
                       new_setting GET    /setting/new(.:format)                                                                   settings#new
                      edit_setting GET    /setting/edit(.:format)                                                                  settings#edit
                           setting GET    /setting(.:format)                                                                       settings#show
                                   PATCH  /setting(.:format)                                                                       settings#update
                                   PUT    /setting(.:format)                                                                       settings#update
                                   DELETE /setting(.:format)                                                                       settings#destroy
                                   POST   /setting(.:format)                                                                       settings#create
delete_image_attachment_collection DELETE /collections/:id/delete_image_attachment(.:format)                                       collections#delete_image_attachment
                       collections GET    /collections(.:format)                                                                   collections#index
                                   POST   /collections(.:format)                                                                   collections#create
                    new_collection GET    /collections/new(.:format)                                                               collections#new
                   edit_collection GET    /collections/:id/edit(.:format)                                                          collections#edit
                        collection GET    /collections/:id(.:format)                                                               collections#show
                                   PATCH  /collections/:id(.:format)                                                               collections#update
                                   PUT    /collections/:id(.:format)                                                               collections#update
                                   DELETE /collections/:id(.:format)                                                               collections#destroy
                rails_service_blob GET    /rails/active_storage/blobs/:signed_id/*filename(.:format)                               active_storage/blobs#show
         rails_blob_representation GET    /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
                rails_disk_service GET    /rails/active_storage/disk/:encoded_key/*filename(.:format)                              active_storage/disk#show
         update_rails_disk_service PUT    /rails/active_storage/disk/:encoded_token(.:format)                                      active_storage/disk#update
              rails_direct_uploads POST   /rails/active_storage/direct_uploads(.:format)                                           active_storage/direct_uploads#create

我的路线.rb:

Rails.application.routes.draw do
  root 'home#index'

  get 'about', to: 'pages#about', as: :about
  get 'contact', to: 'pages#contact', as: :contact
  get 'instellingen', to: 'settings#edit'

  resource :setting
  resources :collections do
    member do
      delete :delete_image_attachment
    end
  end
end

您正在循环遍历图像集合并对每个图像调用 purge 方法。相反,您应该链接到控制器上的销毁方法,如下所示,考虑您的控制器操作并猜测您的路线名称。

该错误是因为图像对象返回其完整路径,并且链接认为您想要指向的内容。相反,你只想要它signed_id并希望链接调用包含您的路线delete_image_attachment path.

 <%= link_to 'Remove', delete_image_attachment_collections_url(image.signed_id),
                method: :delete,
                data: { confirm: 'Are you sure?' } %>

destroy 方法看起来像这样......

def delete_image_attachment
  @image = ActiveStorage::Blob.find_signed(params[:id])
  @image.purge
  redirect_to collections_url
end

路线应该是这样的......

resources :collections do
  member do
    delete :delete_image_attachment
  end
end

查看导轨布线指南 http://guides.rubyonrails.org/routing.html了解更多有趣的路由事实。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 5.2 Active Storage 清除/删除附件 的相关文章

  • Rails 教程 - User.rb 文件错误

    我正在关注 Railstutorial org 第 7 章 我正在尝试运行该应用程序 但出现以下代码错误 该错误表明我需要在文件末尾添加另一个 结束 但我已经尝试过此操作 但没有成功 错误是 Users woshea rails sampl
  • 强制执行 has_many 但当前只有一个关联的“rails 方式”是什么?

    我有一个简单的 Rails 应用程序 其中包含模型项目和阶段 一个项目有许多阶段 但一次只能有一个阶段处于活动状态 即 当前 我仍然希望其他阶段可以访问 但当前阶段应该是应用程序的主要锚点 关于如何实现此要求的决定对我如何处理模型访问 验证
  • rvm + Rails3 + gmaps4rails -acts_as_gmappable

    我是一个红宝石导轨之类的菜鸟 抱歉 如果我的问题很愚蠢 我设置了一个运行 ruby 1 8 7 p334 的 rvm 作为用户 环境 我已经为我的 应用程序 创建了一个 gemset 现在我想在页面上显示地址的地图 我四处寻找 发现了 gm
  • ActiveRecord::Fixture::FixtureError:表“books”没有名为“loves”的列

    奇怪的 Rails 问题 我有一个Book实体和用户可以Love a book 我的所有其他模型都很好并且通过了所有测试 但是在生成新模型之后Love模型和设置装置时 我突然遇到大量这些错误 ActiveRecord Fixture Fix
  • 使用 Ruby Curb 传递 GET 参数

    我正在尝试使用 Curb curb rubyforge org 调用需要在 get 请求中提供参数的 RESTful API 我想获取一个像这样的URLhttp foo com bar xml bla blablabla 我希望能够做类似的
  • 如何在 Rails 中重定向到 404?

    我想在 Rails 中 伪造 404 页面 在 PHP 中 我只发送一个带有错误代码的标头 如下所示 header HTTP 1 0 404 Not Found Rails 是如何做到这一点的 不要自己渲染 404 没有理由这样做 Rail
  • Rspec 通过 mTurk 测试实时结果

    我正在通过 Rspec 测试代码在 mTurk 上创建点击 但同时我需要测试必须从 mTurk 发回的结果 为了节省每次测试的复杂性 我使用 VCR 将 HTTP 请求记录在盒式磁带中 我该如何实施这个测试 好吧 我为此做了一些修改 我使用
  • 我应该在 Heroku 上部署 Ruby on Rails 应用程序吗?

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于我自己的一些情况 我今年 24 岁 去年从北卡罗来纳州立大学毕业 获得了分析硕士学位 统计 数学之类的 我没有很强的编程背景 这对我的问题非
  • ActiveStorage上传大型base64编码字符串?

    如果我有在客户端上使用 JavaScript 编辑 生成的图像 例如 裁剪的照片或画布绘图的结果 是否可以使用 ActiveStorage 上传它 它通常是一个包含以下内容的大字符串 img src 它存储在 JavaScript 变量中
  • 在 Java Servlet 中上传文件

    我有一个 Java 动态 Web 项目 并且正在使用 TomCat v7 0 我是 Web 项目的新手 不太明白如何在我的 jsp 页面之一中上传文件 由于我的项目只是本地的 所以我认为我可以使用多部分形式 其中人们可以选择文件 并且这部分
  • 设计:手动加密密码并直接存储

    我正在尝试从旧数据库迁移大量用户 为此 我使用 activerecord import 并尝试将所有用户数据直接保存到数据库 绕过用户模型 我的问题 我需要获取旧用户的纯文本密码 对其进行加密 然后直接存储到数据库中 我知道怎么做gener
  • 为 has_many 或 habtm 动态创建 after_add 和 after_remove 回调?

    有没有办法动态添加after add and after remove回调现有的has many or has and belongs to many关系 例如 假设我有模型User Thing 和一个连接模型UserThingRelati
  • RSpec 找不到我的控制器未初始化常量

    我的 Rails 应用程序最近从 Rails 3 迁移到 Rails 4 我一直在尝试在各个规范 控制器 模型等 上运行 rspec 但实际定位对象时似乎存在问题 例如 当我尝试运行以下代码时 它会出现未初始化常量错误 这似乎发生在多个控制
  • 从同一个 Rails 代码库运行多个站点?

    我有一位客户想要将他们在一个领域取得成功的 Rails 应用程序应用到另一个类似的领域 该应用程序的这个新实例将开始非常相似 所有相同的功能 不同的徽标和颜色 但是 如果新网站成功 它将不可避免地需要进行重大自定义 而这些自定义不应应用于原
  • 在 Rails 中获取实际的远程 IP?

    我正在开发 Rails 2 3 8 应用程序 我需要存储实际客户端的远程 IP 地址 request remote ip仅返回127 0 0 1 但我需要存储实际的远程IP 例如93 43 56 77 有红宝石可以买吗 或者如何得到它 尝试
  • PostgreSQL 字符串(255)限制 - Rails、Ruby 和 Heroku

    所以我有一个comments表的结构如下 Schema Information Table name comments id integer not null primary key body string 255 notified boo
  • 如何从字符串中提取包含非英文字符的 URL?

    下面是一个简单的脚本 它采用其中包含德语 URL 的锚标记 并提取 URL encoding utf 8 require uri url URI extract a href M nchen a puts url http www exam
  • rspec中的分配意味着什么

    这行代码的作用是什么 assigns articles should eq article 在以下 rspec 中 describe GET index do it populates an array of articles do art
  • Rails 2 Mailer View 将 3D 添加到字符串之前

    我有一个非常旧的 Rails 应用程序 它试图为新用户发送验证电子邮件 但永远找不到令牌 因为由于某种原因 无论我如何生成链接 链接都会以 3D 形式添加到字符串前面 由于某种原因 它似乎还在标记的中间注入了一个 符号 这是一些带有输出的代
  • Rails 6 webpack 抛出“未捕获的引用错误:$未定义”

    大家好 我最近开始使用 ruby 2 6 5 开发 Rails 6 由于 Rails 6 引入了 webpack 所以我尝试使用 webpack 加载我的 js 文件 尽管我已经在 appliation js 中需要了 jquery 但我仍

随机推荐