ruby-on-rails - 使用载波时如何在模型上设置“fog_public”值?
问题描述
我正在使用带有carrierwave gem的rails来上传文件。问题是客户希望这些文件必须具有is_public属性,这将决定文件上传是否可读(S3 存储)。
我现在的解决方案是在 S3 上设置 2 个文件夹来存储并为公共文件夹设置可读性。
image_uploader.rb
def store_dir
if self.model.is_public
"images/public/#{model.id}"
else
"images/private/#{model.id}"
end
end
S3 上的存储桶策略文件
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my_bucket/images/public/*"
}
]
}
config/initializers/config/initializers/carrierwave.rb
config.fog_public = false
但我不想每次都配置 S3 Bucket Policy,因为我的产品会卖给很多客户。我只想根据 image_uploader.rb文件中的is_public值设置fog_public属性配置,如下所示:
image_uploader.rb
before_save :set_is_public
private
def set_is_public
fog_public = self.model.is_public
end
它有什么办法吗?谢谢你。
解决方案
到目前为止我的解决方案是
image_uploader.rb
before :store, :set_is_public
def set_is_public file
self.fog_public = self.model.is_public
end
但问题是当我编辑 is_public 属性时,无法调用此回调
推荐阅读
- docker - 如何使用 Anaconda 制作 docker 镜像并能够使用 GPU?
- mysql - 基于年龄范围和性别的 SUM
- python - 熊猫 - 堆叠后删除索引
- google-app-engine - App Engine 部署失败 - BuildError - MemoryError - 部署失败,退出代码:1
- shell - 在linux中的csv中添加查询结果
- kubernetes - Kubernetes 部署 - 状态副本和规范副本之间的区别
- angular - 在 Angular 8 表单中使用 formControlName 时 Metronic 步骤按钮不起作用
- reactjs - Expose Loader 不会全局导出模块
- c# - 在方法中的任何位置取消操作的最佳方法是什么?
- javascript - 在 onbeforeunload() 函数中设置自定义属性不起作用