在重命名列之前检查列是否存在

时间:2017-10-17 17:22:50

标签: ruby-on-rails activerecord

我正在尝试重命名事件表中的列,如下所示:

class RenameScheduleToScheduleIdInEventsTable < ActiveRecord::Migration
  def up
    rename_column :events, :schedule, :schedule_id
  end

  def down
    rename_column :events, :schedule_id, :schedule
  end
end

这是有效的,但我想首先做的是确保迁移不会在将来失败,在我尝试重命名之前检查列schedule_id是否已经存在。我怎样才能通过迁移实现这一目标?

1 个答案:

答案 0 :(得分:1)

你可以在up和down方法中使用if else条件。如下所示

class RenameScheduleToScheduleIdInEventsTable < ActiveRecord::Migration
  def up
    if Event.attribute_names.include? "schedule"
      rename_column :events, :schedule, :schedule_id
    end
  end

  def down
    if Event.attribute_names.include? "schedule_id"
      rename_column :events, :schedule_id, :schedule
    end
  end
end