编辑迁移 - rails

时间:2018-04-10 09:41:45

标签: ruby-on-rails activerecord

我有一个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

有什么想法吗?

2 个答案:

答案 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

<强>原因:

在开发中,您可以向下迁移并向上迁移,因为您可能会更改数据,而不会增加迁移。但在生产和数据方面至关重要,最好是创建新的迁移。