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




db:migrate db:reset (11)

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.

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

vous pouvez restaurer votre migration en utilisant rake db:rollback avec différentes options.

Mais, en fonction de vos besoins, la syntaxe a changé.

Si vous voulez annuler la dernière migration, vous pouvez l'utiliser.

rake db:rollback

ou

rake db:rollback STEP=1

Si vous voulez réduire le nombre de migration en une fois, alors vous passez simplement l'argument

rake db:rollback STEP=n

n est le nombre de migrations pour l'annulation de la dernière migration.

Si vous souhaitez annuler une migration spécifique, vous devez transmettre la version de migration dans la syntaxe suivante.

rake db:migrate:down VERSION=xxxxx

où xxxxx est le numéro de version de la migration.


Rétablir la dernière migration:

# rails < 5.0
rake db:rollback

# rails >= 5.0
rake db:rollback
# or
rails db:rollback

Rétablir le dernier nombre de migrations

# rails < 5.0
rake db:rollback STEP=2

# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2

Rétablir une migration spécifique

# rails < 5.0
rake db:migrate:down VERSION=20100905201547

# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547

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

Par exemple si la version est 20141201122027, vous ferez:

rake db:migrate:down VERSION=20141201122027

pour annuler cette migration spécifique.


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.


Bien dans les rails 5 c'est assez facile rake db: migrate: status ou rails db: migrate: status

Il a été modifié pour gérer les deux de la même manière. Il suffit ensuite de choisir la version que vous voulez restaurer et d'exécuter rake db: migrate VERSION = 2013424230423

Assurez-vous que VERSION est tout en lettres majuscules

Si vous avez un problème avec une étape de la migration ou êtes coincé au milieu, allez simplement dans le fichier de migration et commentez les lignes qui ont déjà été migrées.

J'espère que cela pourra aider


rake db:rollback STEP=1

Est un moyen de faire cela, si la migration que vous voulez restaurer est la dernière appliquée. Vous pouvez en remplacer 1 pour toutes les migrations que vous souhaitez effectuer.

Par exemple:

rake db:rollback STEP=5

Annulera également toute la migration qui a eu lieu plus tard (4, 3, 2 et 1).

Comme suggéré dans les commentaires:

Pour annuler une utilisation de migration spécifique:

rake db:migrate:down VERSION=20100905201547

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


Les migrations modifient l'état de la base de données à l'aide de la commande

$ bundle exec rake db:migrate

Nous pouvons annuler une seule étape de migration en utilisant

  $ bundle exec rake db:rollback

Pour remonter jusqu'au début, nous pouvons utiliser

  $ bundle exec rake db:migrate VERSION=0

Comme vous pouvez le deviner, la substitution de tout autre numéro pour 0 migre vers ce numéro de version, où les numéros de version proviennent de la liste séquentielle des migrations.


En utilisant Ruby 1.9.3-p194 et Ruby on Rails 3.2.6:

Si request.fullpath ne fonctionne pas pour vous, essayez request.env ["HTTP_REFERER"]

Voici mon histoire ci-dessous.

J'ai rencontré le même problème avec la détection de l'URL actuelle (affichée dans la barre d'adresse de l'utilisateur dans son navigateur) pour les pages cumulées qui combine les informations de différents contrôleurs, par exemple http://localhost:3002/users/1/history/issues .

L'utilisateur peut passer à différentes listes de types de problèmes. Toutes ces listes sont chargées via Ajax à partir de différents contrôleurs / partiels (sans rechargement).

Le problème consistait à définir le chemin correct pour le bouton de retour dans chaque élément de la liste afin que le bouton de retour puisse fonctionner correctement à la fois dans sa propre page et dans l' historique des pages cumulées.

Au cas où j'utiliser request.fullpath , il retourne le chemin de la dernière requête JavaScript qui n'est certainement pas l'URL que je cherche.

J'ai donc utilisé request.env ["HTTP_REFERER"] qui stocke l'URL de la dernière requête rechargée.

Voici un extrait du partiel pour prendre une décision

- if request.env["HTTP_REFERER"].to_s.scan("history").length > 0
  - back_url = user_history_issue_path(@user, list: "needed_type")
- else
  - back_url = user_needed_type_issue_path(@user)
- remote ||= false
=link_to t("static.back"), back_url, :remote => remote




ruby-on-rails schema database-schema