2017-05-28 2 views
0

J'utilise des rails 5, et je l'ai installé la pierre précieuse et a essayé de lancer la migration, mais je reçois cette erreur:Ruby on Rails: la table gyrateuse de ratyrate existe déjà?

Index name 'index_rates_on_rater_id' on table 'rates' already exists

Est-ce que quelqu'un sait pourquoi cela existe? Ceci est un nouveau site et a commencé frais en ajoutant un petit bijou.

Ceci est le fichier de migration qui ne terminerait pas sur l'exécution rails db:migrate

class CreateRates < ActiveRecord::Migration[5.1] 

    def self.up 
     create_table :rates do |t| 
     t.belongs_to :rater 
     t.belongs_to :rateable, :polymorphic => true 
     t.float :stars, :null => false 
     t.string :dimension 
     t.timestamps 
     end 

     add_index :rates, :rater_id 
     add_index :rates, [:rateable_id, :rateable_type] 
    end 

    def self.down 
     drop_table :rates 
    end 

end 
+0

Si vous annulez et commentez 'add_index: rates,: rater_id' et relancez la migration, cela fonctionne-t-il? – Niklas

+0

À quoi ressemble votre fichier db/schema.rb? – ddonche

Répondre

1

La pierre précieuse crée une migration qui ne fonctionne pas dans les versions ultérieures des rails. Dans Rails 5, lorsque vous utilisez les macros belongs_to et references, ils créent des index et des clés étrangères par défaut.

Tout ce que vous avez vraiment besoin est ceci:

class CreateRates < ActiveRecord::Migration[5.1] 
    def self.change 
    create_table :rates do |t| 
     t.belongs_to :rater 
     t.belongs_to :rateable, :polymorphic: true 
     t.float :stars, null: false 
     t.string :dimension 
     t.timestamps 
    end 
    add_index :rates, [:rateable_id, :rateable_type] 
    end 
end 

Vous n'avez pas besoin up et down puisque Rails est assez intelligent pour savoir comment cette migration rollback.

+0

Je voudrais vraiment question si cette gemme en vaut la peine en fonction de la quantité d'activité sur github. – max

+0

Cela fonctionne, merci! Que penseriez-vous que je pourrais utiliser en remplacement de cette gemme, @max – hellomello

+0

dunno, je devine que la fonctionnalité n'est pas difficile à reproduire sur votre propre. – max