Rails 6.1升级后如何为active_storage_blobs表设置忽略指定列?
实现方案
你可以通过以下两种方式给ActiveStorage内置的ActiveStorage::Blob模型配置忽略列,逻辑和自定义模型配置ignored_columns完全一致,只需要确保配置在模型类加载完成后执行即可:
方式1:通过初始化器全局配置(推荐)
在config/initializers/目录下新建active_storage.rb文件,写入以下代码:
Rails.application.config.to_prepare do # 如果遇到数组不可修改的报错,可以替换为下行写法 # ActiveStorage::Blob.ignored_columns = ActiveStorage::Blob.ignored_columns.dup + %w[service_name] ActiveStorage::Blob.ignored_columns += %w[service_name] end
使用to_prepare回调是为了适配开发环境的类重载机制,确保每次类重载后配置仍然生效。
方式2:重写ActiveStorage模型类
在app/models/active_storage/目录下新建blob.rb文件,写入以下代码:
class ActiveStorage::Blob < ApplicationRecord self.ignored_columns += %w[service_name] end
Rails会自动优先加载你自定义的模型类,合并框架内置的模型逻辑,该写法更直观,适合需要对ActiveStorage做多处自定义修改的场景。
注意事项
- 该配置为临时过渡方案,等你完成全量数据迁移、
service_name列的业务逻辑适配完成后,请及时移除该忽略配置,避免后续Rails版本升级出现兼容问题 - 配置添加完成后需要重启Rails服务、清理缓存才能生效
内容的提问来源于stack exchange,提问作者cdmo
相关产品推荐
相关产品推荐

