我们有script/generate migration add_fieldname_to_tablename fieldname:datatype
用于将新列添加到模型的语法。Rails migration for change列
在同一行上,我们有脚本/生成用于更改列的数据类型吗?或者我应该直接将SQL写入我的vanilla迁移中?
我想将列从datetime
更改为date
。
我们有script/generate migration add_fieldname_to_tablename fieldname:datatype
用于将新列添加到模型的语法。Rails migration for change列
在同一行上,我们有脚本/生成用于更改列的数据类型吗?或者我应该直接将SQL写入我的vanilla迁移中?
我想将列从datetime
更改为date
。
我认为这应该工作。
change_column :table_name, :column_name, :date
如果您在表格中有多列更改,也可以使用块。
实施例:
change_table :table_name do |t|
t.change :column_name, :column_type, {options}
end
我不知道您是否可以从命令行创建迁移来完成所有这些操作,但是您可以创建新迁移,然后编辑迁移以执行此操作。
如果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步:
使用此代码生成一个新的迁移文件:
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,它运行良好。
在步骤2中,第一个在运行rake db:rollback后会失败,我建议您检查第二个 – Feuda 2016-12-14 09:45:51
是否有一个rails约定,它允许在生成迁移文件时无需执行任何操作即可完成所有操作,然后编辑它? – BKSpurgeon 2017-01-19 23:52:50
@BKSpurgeon是的,请查看文档:http://edgeguides.rubyonrails.org/active_record_migrations.html – 2017-01-20 09:13:41
另一种方法使用迁移更改数据类型
第一步: 您需要使用迁移
前以移除故障数据类型字段名称:
rails g migration RemoveFieldNameFromTableName field_name:data_type
这里不要忘记为你的字段
指定数据类型第2步: 现在你可以用正确的数据类型添加字段
例如:
rails g migration AddFieldNameToTableName field_name:data_type
就是这样,现在用正确的数据类型字段添加表格就会快乐红宝石编码!
只是产生迁移:
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
我希望更多的脚本/生成迁移路线。 change_column在独立迁移中工作正常 – papdel 2010-05-10 12:10:02
@b_ayan:就我所知,迁移名称中唯一的神奇单词是“add”和“remove”。 – 2010-05-10 22:57:35
这里的排序轨道noob,但是...我明白答案,但不是对这个答案的意见。澄清赞赏:) – 2011-10-12 01:25:20