我有一个使用ActiveStorage向文档添加附件的文档模型:
class Document < ApplicationRecord
has_one_attached :attachment
end
我还有一个现有的S3存储桶,其中包含各种格式的图像:jpg,png。
我需要创建一个新文档,附件是我的S3存储桶中已有的特定图像。
到目前为止,我已经尝试过:
s3 = Aws::S3::Resource.new(region: "us-east-1")
obj = s3.bucket("my-bucket-name").object("s3-object-key")
params = {
filename: obj.key,
content_type: obj.content_type,
byte_size: obj.size,
checksum: obj.etag.gsub('"',"")
}
blob = ActiveStorage::Blob.create_before_direct_upload!(params)
这成功创建了ActiveStorage :: Blob对象
但是当我尝试创建文档时,像这样:
d = Document.create!(attachment:blob.signed_id, name: "new document")
似乎正在链接附件,但是我无法查看或下载附件,并且如下所示的常规活动存储方法不再起作用:
<%= link_to "View", document.attachment.service_url if doc.attachment %>
我刚得到这个错误:
undefined method `service_url' for #<ActiveStorage::Attached::One:0x00007fd7d3f161e0>
如果有人对如何创建带有与S3中的现有文件相对应的附件的文档有更好的建议,将不胜感激。