sql - 在 Rails 迁移中使用 SQL 访问 CarrierWave 图像 url
问题描述
我正在开发一个使用 CarrierWave 进行图像上传的小型应用程序,但是(由于有点长且不真正相关的原因)我们必须停止使用 CarrierWave 并开始使用我们自己的自定义请求将图像上传到不同的云存储服务。
但是我仍然需要已经使用 CarrierWave 上传的图像的 URL,并且image_url
一旦我卸载 CarrierWave 上传器,我将无法访问该方法,所以我想将所有 URL 保存到我模型的新列中,并尽可能优化迁移。
我已经搜索了直接从数据库访问 url 的方法(我的意思是,CarrierWave 必须将它存储在某个地方)但到目前为止还没有运气。
我可以做这样的事情(business_image
是安装上传器的列,image_url
是我要存储 url 的新列):
def change
add_column :business_cards, :image_url, :string
BusinessCard.all.each do |bc|
bc.update(image_url: bc.business_image_url)
end
end
但这显然根本没有优化,因为它会加载所有名片并一一更新。有没有办法在一条 SQL 语句中做到这一点?
(我使用的是 Rails 5.1.4、PostgreSQL 10.3 和carrierWave 1.2.1)
解决方案
一种方法是使用批处理功能并批量更新记录,您可以使用事务,以便如果有任何错误,更改将被回滚。
def change
add_column :business_cards, :image_url, :string
BusinessCard.find_each(batch_size: xxx) do |bc|
ActiveRecord::Base.transaction do
bc.update(image_url: bc.business_image_url)
rescue => e
raise ActiveRecord::Rollback
end
end
end
希望能帮助到你!!
推荐阅读
- azure - Azure AD B2C 中的“用户同意”设置不加载
- python - 向 django 发送 POST 请求时未调用视图中的函数
- python - 如何删除 Tkinter 小部件放置?
- typescript - 打字稿:如何防止发出错误代码?
- javascript - javascript 将对象数组提取到 php 等变量,c# 将对象数组提取到 php 等变量
- php - 在单一和可变产品的“附加信息区域”上显示 SKU
- java - 将数组字符串转换为数组列表而不将其嵌套在Java中
- javascript - Apple Pay 支付请求 API iframe
- python - 如何在 Python 中合并完全不同的数据帧 UP-SIDE
- ios - SwiftUI 布局 - VStack 中的 NavigationView - 填充高度