私たちの 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