2009-08-03 6 views
1

J'ai 4 migrations liées dans mon application Rails:migration Rails QUESTION

3 premières migrations créent une table chacun dans le self.up et les gouttes et dans leurs méthodes de self.down respectives. La quatrième migration exécute une tâche rake qui charge les données vers les trois (en self.up). Je pense à ce qu'il faut mettre dans self.down de cette migration pour supprimer les lignes des 3 tables?

Est-ce que je fais mal? Probablement devrait avoir créé une migration où je crée 3 tables et charge les données dans self.up et dépose juste les trois tables dans la méthode self.down?

Répondre

5

C'est faux!

doit être utilisé les migrations que pour la migration de vos données Modèle pas votre données.

Rails 2.3.4 ajoute 'graines'. Ceci est un fichier dans db/seeds.rb contient du code ruby ​​pour 'bootstrap' votre base de données. C'est un excellent moyen de créer du contenu semi-statique pour votre base de données comme des catégories, des tables de recherche ou des comptes d'utilisateurs.

Vous pouvez ensuite charger les données de semences avec une tâche simple râteau

rake db:seed 
+0

Oui, je suis d'accord et merci pour la réponse. Je travaillais avec les rails 2.2.2 à l'époque. J'ai entendu parler de db: seed récemment et je l'ai utilisé dans mon projet. Charger des données avec des migrations ne m'a jamais semblé juste. –

3

Il n'y a pas vraiment de bonne ou de mauvaise façon de procéder. En fonction de ce que vous avez fait, la 4ème migration devrait simplement décharger les données dans sa méthode descendante. Chaque bas devrait seulement annuler les actions de l'up.

Le chargement de données dans la migration créant la table n'est certainement pas requis. Si vous avez 3 tables qui créent des relations has_many ou belongs_to, il serait logique de placer les données dans une migration séparée afin de pouvoir créer les relations et ensuite les utiliser dans votre chargement de données. Tout cela mis à part, si vous avez une tâche rake pour charger des données, pourquoi s'embêter avec une migration qui exécute cette tâche rake? Faites simplement exécuter la partie rake task de votre installation, ou utilisez simplement votre tâche rake pour charger ou décharger des données de démonstration.

Généralement je garde mon schéma de migrations axé, et je mettrais n'importe quel chargement de données dans une tâche de rake que j'appelle indépendamment.

+0

de __All que de côté, si vous avez une tâche de râteau pour charger des données, pourquoi embêter avec une migration qui va cette tâche de râteau? Faites simplement exécuter la partie rake task de votre installation, ou utilisez simplement votre tâche rake pour charger ou décharger des données de démonstration .__ => principalement pour faciliter la vie des autres développeurs de l'équipe. Ils n'ont donc pas à se souvenir d'une étape supplémentaire de l'exécution d'une tâche de rake. Merci pour la direction si. J'ai continué à penser, ils devraient aller ensemble. Maintenant, je peux simplement supprimer les lignes de la 4ème migration dans self.down. –