2017-10-17 4 views
0

Je suis en train de renommer une colonne dans ma table d'événements, comme suit:Vérifiez si la colonne existe avant de le renommer

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

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

Cela fonctionne, mais ce que je voudrais faire d'abord, pour vous assurer que la migration n'échoue pas dans le futur, vérifie si la colonne schedule_id est déjà là, avant que j'essaie de le renommer. Comment puis-je faire cela à travers une migration?

+0

vérifier ma solution – krishnar

Répondre

1

Vous pouvez utiliser si d'autre état à l'intérieur et vers le bas methods.Like ci-dessous

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

-t-ActiveRecord tirer ces informations directement de la DB ou l'application? Comme j'ai changé le nom de l'attribut dans l'échafaudage, en prévision de la migration – EastsideDeveloper

+0

@EastsideDeveloper il récupère le nom de la colonne directement à partir de DB.No issues.it fonctionne parfaitement. Code testé – krishnar

+0

Testé et vérifié, merci – EastsideDeveloper