是否可以使用类似以下命令来重命名列:
script/generate migration AddColumnToTable column:type
? Thanks.
是否可以使用类似以下命令来重命名列:
script/generate migration AddColumnToTable column:type
? Thanks.
Rails的ActiveRecord ConnectionAdapter提供了一个名为rename_column
的迁移命令。您可以生成一个迁移,然后自己编写代码。示例(MySQL):
script/generate migration rename_my_column_by_hand
然后编辑它创建的文件:
class RenameMyColumnByHand < ActiveRecord::Migration
def self.up
rename_column :my_table, :old_name, :new_name
end
def self.down
rename_column :my_table, :new_name, :old_name
end
end
它执行的 SQL 类似于:
ALTER TABLE my_table CHANGE old_name new_name BIGINT;
注意:此操作仅会重命名该列,而不会更改其他表中对其的引用。
非常好的问题。不幸的是,答案是否定的。请查看Rails 2.3.5源代码:
lib/rails_generator/generators/components/migration/migration_generator.rb
add
、remove
和 to
/from
这几个关键字。我在这里使用了一点诡计。假设我想要将列 foo 改为 bar。
创建一个迁移,其中包括以下步骤:
这种方法非常脆弱。如果有任何一个步骤失败,你可能会丢失数据。