Mysql ALTER TABLE lhm迁移删除现有值 需要“lhm” 类RenameField1ToField2ForTable
发生了什么事Mysql ALTER TABLE lhm迁移删除现有值 需要“lhm” 类RenameField1ToField2ForTable,mysql,sql,ruby-on-rails,migration,alter-table,Mysql,Sql,Ruby On Rails,Migration,Alter Table,发生了什么事 Rails-4.0:rake db:migrate 字段已成功重命名 所有现有字段值都被删除,为什么?有什么想法吗 编辑: 旧数据类型是float(11) MYSQL 5.6 您能像这样进行直轨迁移吗: require 'lhm' class RenameField1ToField2ForTable < ActiveRecord::Migration def up Lhm.change_table :table do |m| m.ddl("ALTE
- 旧数据类型是
float(11)
- MYSQL 5.6
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
我从未使用过lhm,所以这可能不可能
此外,如果已经在数据库中指定了“FLOAT DEFAULT NULL”,那么您可能不需要在当前SQL语句中使用它
希望有帮助。将第一个名称重命名为临时名称,然后将第二个名称重命名为第一个名称,然后将临时名称重命名为第二个名称我强烈建议您使用LHM提供的方法,这些方法模仿Rails提供的方法(如果您计划使用LHM): 如果您查看方法定义,您将看到LHM正在执行
修改
,其中您正在对更改列
执行更改
,对重命名列
执行更改
官方文件:
更改_列:
重命名列:以前的数据类型是什么?旧的数据类型是float(11),我无法复制,看起来不像来自MySQL。我不认识鲁比,所以我就到此为止。SQLfiddle,如果有人想用它玩MySQL 5.6版。小提琴看起来不错,像我们的移民一样工作。所以它没有mysql的问题好吧:/遗憾的是,对于lhm迁移,我不能走正常的rails之路。既然迁移已经完成了,我只想知道为什么这些值会被删除
def change
rename_column :table_name, :old_column, :new_column
end
Lhm.change_table(:users) do |m|
m.change_column(:old_column, :float)
m.rename_column(:old_column, :new_column)
end