2017-10-17 56 views
0

我想重新命名在我的事件表列如下:检查前柱的存在是为了将其改名

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是否已经存在。我如何通过迁移来完成这项工作?

+0

else条件检查我的解决方案 – krishnar

回答

1

您可以使用,如果内部上下methods.Like下面

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 
+0

是否ActiveRecord的拉动这一信息直接从数据库或应用程序的?由于我已经在脚手架中更改了属性的名称,因此预计将迁移 – EastsideDeveloper

+0

@EastsideDeveloper,它直接从DB获取列名。没有问题。它完美地工作。测试代码 – krishnar

+0

经过测试和验证,谢谢 – EastsideDeveloper