我很讨厌命名,并且意识到在Rails应用程序中有更好的模型名称集。
有什么方法可以使用迁移来重命名模型及其对应的表?
rake db:migrate
,它将失败。您可以返回并在迁移中更改这些名称,但这会造成混乱。您最好只创建一个全新的模型而不是重命名它。
rake db:schema:load
吗?
rake db:migrate
正是出于安德鲁(Andrew)指出的担忧,我们不鼓励从头开始建立数据库。
我很讨厌命名,并且意识到在Rails应用程序中有更好的模型名称集。
有什么方法可以使用迁移来重命名模型及其对应的表?
rake db:migrate
,它将失败。您可以返回并在迁移中更改这些名称,但这会造成混乱。您最好只创建一个全新的模型而不是重命名它。
rake db:schema:load
吗?
rake db:migrate
正是出于安德鲁(Andrew)指出的担忧,我们不鼓励从头开始建立数据库。
Answers:
这是一个例子:
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迁移,因此您可以执行以下操作:
class RenameOldTableToNewTable < ActiveRecord::Migration
def change
rename_table :old_table_name, :new_table_name
end
end
(您仍然必须仔细检查并手动重命名文件。)
git grep -i activit
这非常具有启发性。
其他答案和注释包括表重命名,文件重命名和代码遍历。
我想补充一些注意事项:
让我们使用我今天面对的一个现实示例:将模型从“商人”重命名为“业务”。
您还需要替换索引:
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 g migration redirect_ {old_table_name} to {new_table_name}
编辑文件并将此代码添加到方法更改后
named_table:{old_table_name},:{new_table_name}