Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql ALTER TABLE lhm迁移删除现有值 需要“lhm” 类RenameField1ToField2ForTable_Mysql_Sql_Ruby On Rails_Migration_Alter Table - Fatal编程技术网

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

发生了什么事

  • 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("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