如何在Rails框架中修改数据表名称?
解决Rails修改已执行迁移的表名不生效问题
修改已经执行过的create_table迁移文件不会生效,是因为Rails会把所有已执行的迁移时间戳记录到schema_migrations表,已经完成的迁移默认不会重复执行,按照你的场景可以选择以下两种解决方案:
方案1:仅本地开发、无正式数据、可回滚迁移的场景
- 先回滚到创建目标表的迁移之前的版本,执行命令:
rails db:rollback STEP=N,将N替换为你需要回滚的迁移步数,确保目标表的创建迁移被完全回滚 - 再修改对应迁移文件中
create_table方法的表名参数 - 重新执行迁移即可生效:
rails db:migrate
注意:该方法会删除回滚迁移涉及的表和所有数据,严禁在有正式数据的线上/测试环境使用
方案2:迁移已上线/不能回滚的场景,新建重命名迁移
- 生成新的迁移文件,执行命令:
rails generate migration RenameOldTableToNewTable - 打开新生成的迁移文件,在
change方法中补充重命名逻辑:
def change rename_table :你的旧表名, :你的新表名 end
- 执行迁移:
rails db:migrate - 如果新表名不符合Rails默认的模型对应命名规则,还需要在对应模型类中手动指定表名:
self.table_name = "你的新表名"
内容的提问来源于stack exchange,提问作者Roopa Rauniyar
相关产品推荐
相关产品推荐

