我们有script/generate migration add_fieldname_to_tablename fieldname:datatype语法,用于向模型添加新列。
在同一行中,是否有用于更改列的数据类型的脚本/generate ?或者我应该直接将SQL写入我的常规迁移中?
我想将一列从datetime改为date。
我们有script/generate migration add_fieldname_to_tablename fieldname:datatype语法,用于向模型添加新列。
在同一行中,是否有用于更改列的数据类型的脚本/generate ?或者我应该直接将SQL写入我的常规迁移中?
我想将一列从datetime改为date。
当前回答
使用# change_column。
change_column(:table_name, :column_name, :date)
# a few more examples:
change_column(:suppliers, :name, :string, limit: 80)
change_column(:accounts, :description, :text)
注意:即使在数据库迁移之外也可以得到相同的结果,这可能对测试/调试很方便,但这个方法需要非常谨慎地使用:
ActiveRecord::Base.connection.change_column(:table_name, :column_name, :date)
其他回答
只需生成迁移:
rails g migration change_column_to_new_from_table_name
像这样更新迁移:
class ClassName < ActiveRecord::Migration
change_table :table_name do |table|
table.change :column_name, :data_type
end
end
最后
rake db:migrate
另一种改变数据类型的方法是使用迁移
步骤1: 您需要使用迁移删除错误的数据类型字段名
ex:
rails g migration RemoveFieldNameFromTableName field_name:data_type
这里不要忘记为字段指定数据类型
步骤2: 现在您可以使用正确的数据类型添加字段
ex:
rails g migration AddFieldNameToTableName field_name:data_type
就是这样,现在你的表将添加正确的数据类型字段,快乐的ruby编码!!
使用# change_column。
change_column(:table_name, :column_name, :date)
# a few more examples:
change_column(:suppliers, :name, :string, limit: 80)
change_column(:accounts, :description, :text)
注意:即使在数据库迁移之外也可以得到相同的结果,这可能对测试/调试很方便,但这个方法需要非常谨慎地使用:
ActiveRecord::Base.connection.change_column(:table_name, :column_name, :date)
正如我从前面的答案中发现的,改变列的类型需要三个步骤:
步骤1:
使用下面的代码生成一个新的迁移文件:
rails g migration sample_name_change_column_type
步骤2:
转到/db/migrate文件夹并编辑您创建的迁移文件。有两种不同的解决方案。
def变化 Change_column (:table_name,:column_name,:new_type) 结束
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上测试了这个解决方案,效果很好。
你可以使用change_column:
def change
change_column :table_name, :column_name, :new_data_type
end