2010-07-28 4 views
3

Je sais que ce n'est pas la meilleure pratique, et probablement ne devrait même pas être utilisé, car c'est ce que les migrations sont utilisées, mais je me demandais s'il était possible d'exécuter des commandes spécifiques à la migration. Quelque chose comme:Rails - Possibilité d'exécuter des méthodes de migration dans une tâche rake générique?

namespace :dummy do 
    task :update => :environment do 
     add_column :users, :deleted, :boolean, { :null => false, :default => false } 
    end 
end 

Merci

Répondre

1

Oui, vous devriez faire quelque chose comme ceci:

namespace :dummy do 
    task :update => :enviroment do 
    ActiveRecord::Migration.send(:add_column, :users, :deleted, :boolean, { :null => false, :default => false }) 
    end 
end 

Non testé, mais la chose importante est ici pour inclure la classe de migration, puis envoyer la méthode vous souhaitez courir.

MISE À JOUR utiliser ActiveRecord::Migration directement via @tadman

+1

Y compris une migration arbitraire semble étrange. Pourquoi ne pas batailler contre ActiveRecord :: Migration directement? – tadman

+0

Yup Vous avez raison, je vais modifier la réponse, merci! – jpemberthy

+0

Pour une raison quelconque, je supposais que si j'utilisais directement la classe ActiveRecord :: Migration, j'essaierais d'insérer un enregistrement dans la table schema_migrations – gmoniey

6

Il est possible d'exécuter des pseudo-migrations arbitraires dans vos tâches rake:

namespace :dummy do 
    task :update => :environment do 
    ActiveRecord::Base.connection.add_column :users, :deleted, :boolean, :null => false, :default => false 
    end 
end 

Si vous faites beaucoup de ce genre de chose, utiliser raccourci:

namespace :dummy do 
    task :update => :environment do 
    c = ActiveRecord::Base.connection 

    c.add_column :users, :deleted, :boolean, :null => false, :default => false 
    end 
end 
+0

Bon à savoir. Je n'ai pas réalisé que ces fonctions faisaient partie de la classe de connexion. Merci. – gmoniey

+0

Il y a beaucoup de bonnes choses là-bas si vous regardez autour de vous. Je suis un grand fan de l'objet de connexion, en particulier des choses comme select_values. – tadman

Questions connexes