Rails迁移更改列

百般思念 提交于 2020-03-17 22:00:31

某厂面试归来,发现自己落伍了!>>>

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

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

我想将datetime date列更改为date


#1楼

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

如果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

#2楼

我认为这应该有效。

change_column :table_name, :column_name, :date

#3楼

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

步骤1:

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

rails g migration sample_name_change_column_type

第2步:

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

  1. 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测试了这个解决方案,它运行良好。


#4楼

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

例:

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

有关更多详细信息,请参阅Table类API文档


#5楼

使用迁移更改数据类型的另一种方法

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

例如:

rails g migration RemoveFieldNameFromTableName field_name:data_type

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

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

例如:

rails g migration AddFieldNameToTableName field_name:data_type

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!