Rails迁移的变化列

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

在同一行上,我们有一个脚本/生成更改列的数据types? 或者我应该直接写SQL到我的香草迁移?

我想从datetime更改列date

我认为这应该工作。

 change_column :table_name, :column_name, :date 

如果您在表格中有多列更改,也可以使用块。

例:

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

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

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

如果tablename是你的表的名字,fieldname是你的字段的名字,你想从datetime更改为date,你可以写一个迁移来做到这一点。

您可以创build一个新的迁移:

 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 

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

步骤1:

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

 rails g migration sample_name_change_column_type 

第2步:

进入/db/migrate文件夹并编辑你所做的迁移文件。 有两种不同的解决scheme。

  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 

我已经testing了Rails 4的这个解决scheme,它运行良好。

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

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

例如:

 rails g migration RemoveFieldNameFromTableName field_name:data_type 

这里不要忘记为你的字段指定数据types

第2步:现在您可以添加正确的数据types的字段

例如:

 rails g migration AddFieldNameToTableName field_name:data_type 

就是这样,现在你的表将添加正确的数据types字段,快乐的ruby编码!

只需生成迁移:

 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