You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重写Rails中ActionText::RichText的table_name适配table_name_prefix

重写Rails ActionText、ActiveStorage硬编码表名的方案

你可以通过Rails初始化器动态覆盖原生类的表名配置,同时兼容项目已有的table_name_prefix全局设置,无需修改Rails源码。

操作步骤

  1. 在Rails项目的config/initializers目录下新建初始化文件,例如custom_orm_table_names.rb
  2. 添加以下代码覆盖原有硬编码的表名配置:
# 覆盖ActionText表名配置
ActionText::RichText.class_eval do
  self.table_name = "#{Rails.application.config.active_record.table_name_prefix}action_text_rich_texts"
end

# 覆盖ActiveStorage表名配置,按需补充你用到的模型
ActiveStorage::Blob.class_eval do
  self.table_name = "#{Rails.application.config.active_record.table_name_prefix}active_storage_blobs"
end

ActiveStorage::Attachment.class_eval do
  self.table_name = "#{Rails.application.config.active_record.table_name_prefix}active_storage_attachments"
end

# 如果使用了ActiveStorage的变体功能,也可对应添加配置
ActiveStorage::VariantRecord.class_eval do
  self.table_name = "#{Rails.application.config.active_record.table_name_prefix}active_storage_variant_records"
end

配套配置说明

  • 两个项目只需在各自的config/application.rb中保留原本的table_name_prefix配置即可,无需修改初始化文件代码:
    项目A配置示例:
    config.active_record.table_name_prefix = "project_a_"
    
    项目B配置示例:
    config.active_record.table_name_prefix = "project_b_"
    
  • 生成ActionText、ActiveStorage的迁移文件后,需要手动修改迁移中的表名为带对应前缀的名称,保证数据库中建表的名称和配置一致。
  • 每次升级Rails版本后,可验证一次配置是否生效,避免Rails官方调整类加载顺序导致覆盖失效。

内容的提问来源于stack exchange,提问作者Sharjeel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 08:15:04