首页 > 解决方案 > 像访问本机模型一样访问 ActiveStorageBlob 或 ActiveStorageAttachment

问题描述

是否可以像访问本机模型一样访问 ActiveStorageBlob 或 ActiveStorageAttachment?

例如

我想做ActiveStorageBlob.first访问这个模型/表的第一条记录。或者。ActiveStorageAttachment.all.as_json生成 json 格式的打印。

背景思想是想办法将这些ActiveStorage相关表的内容转储为json格式的文件。然后更改这些文件的内容,然后将其加载回来。

----得到正确答案后扩展本文-----

非常感谢莎拉玛丽。我希望您知道如何将 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”。)

标签: ruby-on-railsruby-on-rails-6

解决方案


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)

参考https ://github.com/rails/rails/blob/5f3ff60084ab5d5921ca3499814e4697f8350ee7/activestorage/app/controllers/active_storage/direct_uploads_controller.rb#L8-L9

https://github.com/rails/rails/blob/098fd7f9b3d5c6f540911bc0c17207d6b48d5bb3/activestorage/app/models/active_storage/blob.rb#L113-L120


推荐阅读