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。
-
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