刚刚创建了一个新的 Rails 6 应用程序,我试图通过使用 rails scaffold 生成的表单将图像添加到 active_storage blob 而不是替换它们。
遵循文档(https://guides.rubyonrails.org/active_storage_overview.html#has-many-attached),在我的控制器中使用 #attach ,但它会导致一个错误页面并保持替换所有的“默认”行为图像而不是添加新图像。
使用 Rails 6.0.0 和 active_storage 6.0.0
我首先创建了一个 Page 模型rails g scaffold Page name:string,然后在我的 page.rb 模型中添加了与 ActiveStorage 的关联has_many_attached :images
在我的表单中,我添加了一个 file_field,允许多次上传:
<%= form.file_field :images, multiple: true %>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器更新操作,请注意@page.images.attach(params[:images]),根据文档,它应该可以完成这项工作
<%= form.file_field :images, multiple: true %>
Run Code Online (Sandbox Code Playgroud)
在填写表格,附加新图片并发布时,我收到以下错误:
ArgumentError in PagesController#update
Could not find or build blob: expected attachable, got nil
Run Code Online (Sandbox Code Playgroud)
指向线 @page.images.attach(params[:images])
检查服务器日志时,我注意到尽管出现错误,但默认行为仍在运行:旧图像被删除,新图像被附加。
我有一个 Rails 模型:
has_many_attached :files
Run Code Online (Sandbox Code Playgroud)
默认情况下,通过 Active Storage 上传时,如果您上传新文件,它会删除所有现有上传内容并将其替换为新文件。
我有一个控制器破解,由于多种原因,它不太理想:
在 Rails 6 中使用 has_many_attached 更新图像的正确方法是什么
有没有办法配置 Active Storage 以保留现有的存储?
我有一个简单的模型,可以通过ActiveStorage处理文件存储附加多个图像。
我正在使用ActiveAdmin编辑我的模型并上传/附加图像 - 到目前为止没有问题。
问题是,当我想编辑我的模型并添加新图像时,之前的图像会被删除,而只会添加新的图像。
我可以预览已经附加的图像,也可以单独删除它们,但是我如何实现,通过上传新图像,旧图像不会被删除?
我的型号:
class Post < ActiveRecord::Base
has_many_attached :images
end
Run Code Online (Sandbox Code Playgroud)
我的 ActiveAdmin 页面:
ActiveAdmin.register AdminPost do
permit_params images:[]
form do |f|
f.input :images, as: :file, input_html: { multiple: true }
if @resource.images.exists?
@resource.images.map do |m|
para image_tag m
end
end
end
end
Run Code Online (Sandbox Code Playgroud)