我在命名方面很糟糕,并且意识到在我的Rails应用程序中有一组更好的模型名称。是否有任何方法使用迁移来重命名模型及其对应的表?
这里有一个例子:
class RenameOldTableToNewTable < ActiveRecord::Migration def self.up rename_table :old_table_name, :new_table_name end def self.down rename_table :new_table_name, :old_table_name end end
我不得不手动重命名模型声明文件。
编辑:
在Rails 3.1 &4、ActiveRecord::Migration::CommandRecorder知道如何反转rename_table迁移,所以你可以这样做:
ActiveRecord::Migration::CommandRecorder
class RenameOldTableToNewTable < ActiveRecord::Migration def change rename_table :old_table_name, :new_table_name end end
(你仍然需要手动重命名文件。)
其他答案和评论涵盖了表重命名、文件重命名和代码中的grep。
我想再补充几点注意事项:
让我们使用我今天遇到的一个真实的例子:将一个模型从“Merchant”重命名为“Business”。
你还需要替换索引:
class RenameOldTableToNewTable< ActiveRecord:Migration def self.up remove_index :old_table_name, :column_name rename_table :old_table_name, :new_table_name add_index :new_table_name, :column_name end def self.down remove_index :new_table_name, :column_name rename_table :new_table_name, :old_table_name add_index :old_table_name, :column_name end end
并重命名您的文件等,手动的其他答案在这里描述。
看:http://api.rubyonrails.org/classes/ActiveRecord/Migration.html
确保在编写迁移之后可以回滚和前滚。如果您犯了一些错误,并且被试图影响不再存在的东西的迁移所困扰,那么这可能会很棘手。如果不能回滚,最好销毁整个数据库并重新开始。所以要注意你可能需要备份一些东西。
另外:检查schema_db中由has_或belongs_to等定义的其他表中的任何相关列名。你可能也需要编辑这些。
最后,在没有回归测试套件的情况下这样做是愚蠢的。
在Rails 4中,我所要做的就是更改def
def change rename_table :old_table_name, :new_table_name end
我所有的索引都被照顾好了。我不需要通过删除旧索引和添加新索引来手动更新索引。
它也可以用变化来改变指数的上下变化。
你可以的 执行命令:rails g migration rename_ {old_table_name} 来 {new_table_name} < / p >
在编辑文件并将此代码添加到方法中后,将发生更改
Rename_table:{old_table_name},:{new_table_name}