如何解决像访问本机模型一样访问 ActiveStorageBlob 或 ActiveStorageAttachment
是否可以像访问本机模型一样访问 ActiveStorageBlob 或 ActiveStorageAttachment?
例如
我想执行 ActiveStorageBlob.first
来访问此模型/表的第一条记录。
要么。 ActiveStorageAttachment.all.as_json
生成 json 格式的打印。
背景思路是想办法把这些ActiveStorage相关表的内容转储为json格式的文件。然后在这些文件上更改 simthing,并将其加载回来。
----得到正确答案后扩展此文本-----
非常感谢莎拉玛丽。 我希望您知道如何将 JSON 数据加载回这些表中? 我试过这个:
dump_file_path = File.join(Rails.root,"backup",active_storage_blobs_file)
load_json = JSON.parse(File.read(dump_file_path))
load_json.each do |j|
ActiveStorage::Blob.create(j)
end
但这不起作用。
ActiveModel::UnknownAttributeError (未知属性 ActiveStorage::Blob 的“attachable_sgid”。)
解决方法
ActiveStorage::Blob.first
ActiveStorage::Attachment.all.as_json
---- 对于第二个扩展问题----
ActiveStorage::Blob.create_before_direct_upload!(
filename: j[:filename],content_type: j[:content_type],byte_size: j[:byte_size],checksum: j[:checksum]
)
# or
ActiveStorage::Blob.create_before_direct_upload!(**j.symbolize_keys)
,
现在我有了一个完整的解决方案,如何将 ActiveStorage 表转储和加载为 JSON 文件。
...扔掉它
active_storage_blobs_file = "active_storage_blob.json"
active_storage_attachments_file = "active_storage_attachment.json"
puts("...dump active_storage_blob")
dump_file_path = File.join(Rails.root,"backup",active_storage_blobs_file)
dump_file = File.open(dump_file_path,"w")
dump_file.write(JSON.pretty_generate(ActiveStorage::Blob.all.as_json))
dump_file.close()
puts("...dump active_storage_attachment")
dump_file_path = File.join(Rails.root,active_storage_attachments_file)
dump_file = File.open(dump_file_path,"w")
dump_file.write(JSON.pretty_generate(ActiveStorage::Attachment.all.as_json))
dump_file.close()
...加载回来
puts("...load active_storage_blob")
dump_file_path = File.join(Rails.root,active_storage_blobs_file)
abort("File does not exist (" + dump_file_path + ") > abort <") unless File.exist?(dump_file_path)
load_json = JSON.parse(File.read(dump_file_path))
load_json.each do |j|
j = j.except("attachable_sgid")
result = ActiveStorage::Blob.create(j)
if (not result.errors.empty?)
puts(result.errors.full_messages.to_s)
puts(j.inspect)
exit(1)
end
end
puts("...load active_storage_attachment")
dump_file_path = File.join(Rails.root,active_storage_attachments_file)
abort("File does not exist (" + dump_file_path + ") > abort <") unless File.exist?(dump_file_path)
load_json = JSON.parse(File.read(dump_file_path))
load_json.each do |j|
result = ActiveStorage::Attachment.create(j)
if (not result.errors.empty?)
puts(result.errors.full_messages.to_s)
puts(j.inspect)
exit(1)
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。