2017-07-03 6 views
1

J'utilise Ruby avec du raisin. J'ai créé un fichier de migration pour générer un modèle. Lorsque j'ai exécuté le fichier de migration, aucune erreur n'a été générée mais le modèle n'a pas été créé. J'ai donc essayé de revenir en arrière. puisque le modèle ne quitte pas, il renvoie à nouveau une erreur.Le nom de l'index sur le tableau n'existe pas

class CreatePaymentFortumoInstruments < ActiveRecord::Migration 
     def change 
     create_table(:payment_fortumo_instruments, id: false) do |t| 
      t.primary_key :id, :uuid 
      t.string :consumer_id, null: false 
      t.string :product_code, null: true, default: nil 
      t.string :partner, null: false 
      t.string :aasm_state, null: false 
      t.datetime :issued_at, null: true 
      t.datetime :activated_at, null: true 
      t.datetime :deactivated_at, null: true 
      t.timestamps 
     end 

     add_index :payment_fortumo_instruments, :id 
     add_index :payment_fortumo_instruments, :consumer_id 
    end 
    end 

et l'erreur jeté en roulant arrière

== 76 CreatePaymentFortumoInstruments: reverting 
    ============================== 
    -- remove_index(:payment_fortumo_instruments, 
    {:column=>:consumer_id}) 
    rake aborted! 
    StandardError: An error has occurred, this and all later migrations 
    canceled: 

Index name ‘index_payment_fortumo_instruments_on_consumer_id’ on table 
‘payment_fortumo_instruments’ does not exist 
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
(required)>' 
ArgumentError: Index name 
‘index_payment_fortumo_instruments_on_consumer_id’ on table 
‘payment_fortumo_instruments’ does not exist 
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top 
    (required)>' 
Tasks: TOP => db:rollback 
(See full trace by running task with --trace) 

Comment puis-je utiliser le même fichier de migration et de créer le modèle. Je ne veux pas créer un nouveau fichier de migration pour le même.

+0

Désolé, le nom du modèle est CreatePaymentFortumoInstruments pas CreateTestPaymentFortumoInstruments. –

+1

Supprimez le dernier enregistrement de migration de votre table schema_migrations. Si votre fichier schema.rb est déjà généré, remplacez le numéro de version par le fichier de migration précédent (celui précédant CreatePaymentFortumoInstruments). Ensuite, lancez rake db: migrate –

+0

La création d'une ** table ** via une migration ne créera pas un ** modèle ** associé. (Vous n'avez pas toujours * besoin * d'un modèle pour une table donnée!) Vous devez créer ceci séparément, ou avec une sorte de générateur de "échafaudage" - par ex. [this] (https://github.com/icicletech/grape-scaffold#scaffold). –

Répondre

1

Si vous avez raté votre migration et qu'il s'agit d'une base de données locale, il est toujours plus simple de supprimer la base de données et d'exécuter de nouveau les migrations.

Si votre dernière migration a correctement mis à jour le schéma, vous pouvez simplement exécuter rake db: reset, qui va recréer la base de données et charger à partir du schéma.

Mais pour être sûr, je suggère de relancer les migrations: db:migrate:reset, qui va recréer la base de données, puis lancer les migrations.

+0

Merci, la mise à jour de schema_migrations a fonctionné pour moi. –