我有一个rails迁移。我有以下迁移
create_table :patients do |t|
t.string :name, null: false
t.integer :age, null: false
t.string :phone, null: false
t.string :ailment, null: false
t.datetime :apointment, null: false
t.string :status, null: false
end
我想将datetime
更改为date
,但当我更改它,回滚并重新启动时,它会保持为datetime
。
有什么想法吗?
答案 0 :(得分:0)
您可以进行额外迁移以更改列类型:
class AlterAppointmentColumnType < ActiveRecord::Migration[5.1]
def up
change_column :patients, :apointment, :date
end
def down
change_column :patients, :apointment, :datetime
end
end
如果您已经部署了代码,请选择创建新的迁移。
答案 1 :(得分:0)
在开发中:
db:rollback
仅回滚最后一个migration
,因此仅当它是最后一个migration
时才有效。
如果不是上次迁移,则应使用迁移的特定版本(时间戳)回滚
rake db:migrate:down VERSION=20180905201547
要获取版本或时间戳,请使用
rake db:migrate:status
生产中:
创建新迁移以更改列。
您可以使用
创建rails g migration change_data_type_for_appointment
然后在新的迁移文件中:
class ChangeDataTypeForAppointment < ActiveRecord::Migration
def self.up
change_table :tablename do |t|
t.change :apointment, :date
end
end
def self.down
change_table :tablename do |t|
t.change :apointment, :datetime
end
end
end
<强>原因:强>
在开发中,您可以向下迁移并向上迁移,因为您可能会更改数据,而不会增加迁移。但在生产和数据方面至关重要,最好是创建新的迁移。