[ruby-on-rails] Comment annuler une migration spécifique?


5 Answers

rake db:migrate:down VERSION=20100905201547

va restaurer le fichier spécifique.

Pour trouver la version de toutes les migrations, vous pouvez utiliser cette commande:

rake db:migrate:status

Ou simplement, le préfixe du nom de fichier de la migration est la version dont vous avez besoin pour revenir en arrière.

Voir l'entrée du guide Ruby on Rails sur les migrations.

Question

J'ai le fichier de migration suivant db\migrate\20100905201547_create_blocks.rb

Comment puis-je restaurer spécifiquement ce fichier de migration?




Pour annuler la dernière migration, procédez comme suit:

rake db:rollback

Si vous souhaitez annuler une migration spécifique avec une version, vous devez effectuer les opérations suivantes:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

Si le fichier de migration que vous souhaitez restaurer a été appelé db/migrate/20141201122027_create_some_table.rb , la VERSION de cette migration est 20141201122027 , qui est l'horodatage de la création de cette migration et la commande permettant d'annuler cette migration serait la suivante:

rake db:migrate:down VERSION=20141201122027



rake db:migrate:down VERSION=your_migrations's_version_number_here

La version est le préfixe numérique du nom de fichier de la migration

Comment trouver la version :

Vos fichiers de migration sont stockés dans votre rails_root/db/migrate . Trouvez le fichier approprié vers lequel vous voulez revenir et copiez le numéro de préfixe.

par exemple

nom de fichier: 20140208031131_create_roles.rb puis la version est 20140208031131




Si vous voulez revenir en arrière et migrer, vous pouvez exécuter:

rake db:migrate:redo

C'est pareil que:

rake db:rollback
rake db:migrate



S'il s'agit d'une migration réversible et que la dernière a été exécutée, lancez rake db:rollback . Et vous pouvez toujours utiliser la version. par exemple

le fichier de migration est 20140716084539_create_customer_stats.rb, donc la commande rollback sera, rake db:migrate:down VERSION=20140716084539




De Rails Guide

Rétablissement des migrations précédentes

Vous pouvez utiliser la capacité d'Active Record pour annuler les migrations à l'aide de la méthode revert :

require_relative '20100905201547_create_blocks'

class FixupCreateBlock < ActiveRecord::Migration
  def change
    revert CreateBlock

    create_table(:apples) do |t|
      t.string :variety
    end
  end
end

La méthode revert accepte également un bloc d'instructions à inverser. Cela peut être utile pour inverser les parties sélectionnées des migrations précédentes. Par exemple, imaginons que CreateBlock est validée et il est ensuite décidé qu'il est préférable d'utiliser les validations Active Record, à la place de la contrainte CHECK, pour vérifier le code postal.

    class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
      def change
        revert do
          # copy-pasted code from CreateBlock
          reversible do |dir|
            dir.up do
              # add a CHECK constraint
              execute <<-SQL
                ALTER TABLE distributors
                  ADD CONSTRAINT zipchk
                    CHECK (char_length(zipcode) = 5);
              SQL
            end
            dir.down do
              execute <<-SQL
                ALTER TABLE distributors
                  DROP CONSTRAINT zipchk
              SQL
            end
          end

          # The rest of the migration was ok
        end
      end
    end

La même migration pourrait aussi avoir été écrite sans utiliser de retour, mais cela aurait impliqué quelques étapes supplémentaires: inverser l'ordre de create_table et réversible, remplacer create_table par drop_table, et enfin remplacer up by down et vice versa. Tout cela est pris en charge par revenir.




Related