在我们的 Ruby 中,我希望每个帐户都有一个单独的 S3 存储桶来存放其附件。我还希望存储桶名称可以从帐户的属性中派生:
Account(id: 1, username: "johnny") # uses the "1-johnny" bucket
Account(id: 2, username: "peter") # uses the "2-peter" bucket
# ...
这样的事情在神社可以做吗?
是的。首先,您使用default_storage
插件动态分配存储名称:
Shrine.plugin :default_storage, store: ->(record, name) do
"store_#{record.id}_#{record.username}"
end
# store_1_johnny
# store_2_peter
接下来,您使用dynamic_storage
插件根据标识符动态实例化 S3 存储:
Shrine.plugin :dynamic_storage
Shrine.storage /store_(\d+)_(\w+)/ do |match|
bucket_name = "#{match[1]}_#{match[2]}"
Shrine::Storage::S3.new(bucket: bucket_name, **s3_options)
end
# 1-johnny
# 2-peter