首页 文章

Rails迁移更改列

提问于
浏览
301

我们有 script/generate migration add_fieldname_to_tablename fieldname:datatype 语法,用于向模型添加新列 .

在同一行,我们是否有用于更改列的数据类型的脚本/生成?或者我应该直接在我的vanilla迁移中编写SQL吗?

我想将列从 datetime 更改为 date .

7 回答

  • 6

    只需生成迁移:

    rails g migration change_column_to_new_from_table_name
    

    像这样更新迁移:

    class ClassName < ActiveRecord::Migration
        change_table :table_name do |t|
          t.change :column_name, :data_type
        end
    end
    

    最后

    rake db:migrate
    
  • 5

    正如我在前面的答案中发现的那样,需要三个步骤来更改列的类型:

    步骤1:

    使用以下代码生成新的迁移文件:

    rails g migration sample_name_change_column_type
    

    第2步:

    转到 /db/migrate 文件夹并编辑您创建的迁移文件 . 有两种不同的解决方案 .

    def change
        change_column(:table_name, :column_name, :new_type)
    end
    

    2 .

    def up
            change_column :table_name, :column_name, :new_type
        end
    
        def down
            change_column :table_name, :column_name, :old_type
        end
    

    第3步:

    不要忘记执行此命令:

    rake db:migrate
    

    我已经为Rails 4测试了这个解决方案,它运行良好 .

  • 95

    我认为这应该有效 .

    change_column :table_name, :column_name, :date
    
  • 28

    使用Rails 5

    Rails Guides

    如果您希望迁移执行Active Record不知道如何撤消的操作,可以使用可逆:

    class ChangeTablenameFieldname < ActiveRecord::Migration[5.1]
      def change
        reversible do |dir|
          change_table :tablename do |t|
            dir.up   { t.change :fieldname, :date }
            dir.down { t.change :fieldname, :datetime }
          end
        end
      end
    end
    
  • 82

    如果要在表中更改多列,也可以使用块 .

    例:

    change_table :table_name do |t|
      t.change :column_name, :column_type, {options}
    end
    

    有关详细信息,请参阅API documentation on the Table class .

  • 511

    我不知道您是否可以从命令行创建迁移来完成所有这些操作,但您可以创建新的迁移,然后编辑迁移以执行此操作 .

    如果tablename是表的名称,fieldname是字段的名称,并且您希望从日期时间更改为日期,则可以编写迁移来执行此操作 .

    您可以使用以下命令创建新迁移:

    rails g migration change_data_type_for_fieldname
    

    然后编辑迁移以使用change_table:

    class ChangeDataTypeForFieldname < ActiveRecord::Migration
      def self.up
        change_table :tablename do |t|
          t.change :fieldname, :date
        end
      end
      def self.down
        change_table :tablename do |t|
          t.change :fieldname, :datetime
        end
      end
    end
    

    然后运行迁移:

    rake db:migrate
    
  • 1

    Another way to change data type using migration

    step1: 您需要使用迁移删除故障数据类型字段名称

    ex:

    rails g migration RemoveFieldNameFromTableName field_name:data_type
    

    这里不要忘记为您的字段指定数据类型

    Step 2: 现在您可以添加具有正确数据类型的字段

    ex:

    rails g migration AddFieldNameToTableName field_name:data_type
    

    就是这样,现在你的表将添加正确的数据类型字段,快乐红宝石编码!

相关问题