require 'lhm'
class RenameField1ToField2ForTable < ActiveRecord::Migration
def up
Lhm.change_table :table do |m|
m.ddl("ALTER TABLE %s CHANGE COLUMN field1 field2 FLOAT DEFAULT NULL AFTER field3" m.name)
end
end
def down
Lhm.change_table :table do |m|
m.ddl("ALTER TABLE %s CHANGE COLUMN field2 field1 FLOAT DEFAULT NULL AFTER field3" m.name)
end
end
end
发生了什么:
编辑:
float(11)
答案 0 :(得分:4)
我强烈建议您使用LHM提供的方法来模仿Rails中的方法(如果您打算使用LHM):
Lhm.change_table(:users) do |m|
m.change_column(:old_column, :float)
m.rename_column(:old_column, :new_column)
end
如果您查看方法定义,您会看到LHM正在MODIFY
执行CHANGE
change_column
和CHANGE
rename_column
ViewController
1}}。
官方文件:
change_column: https://docs.omniref.com/ruby/gems/lhm/2.2.0/symbols/Lhm::Migrator/change_column?d=415590290&n=0#
rename_column:https://docs.omniref.com/github/soundcloud/lhm/2.2.0/symbols/Lhm::Migrator/rename_column?d=409846811&n=4#
答案 1 :(得分:0)
你可以像这样进行直接轨道迁移:
def change
rename_column :table_name, :old_column, :new_column
end
我从未使用过lhm,所以这可能不可能?
如果已在数据库中指定了当前SQL语句中的“FLOAT DEFAULT NULL”,则可能不需要它。
希望有所帮助。
答案 2 :(得分:0)
将1st_name重命名为temporary_name,然后将2nd_name重命名为1st_name,然后从temporary_name重命名为2nd_name