2017-01-17 1 views
2

J'ai suivi des exemples en ligne sur la façon de créer des tables de manière Rails et j'ai remarqué que les scripts de migration que j'ai créés contenant des références ne fonctionnaient pas correctement. J'ai pensé que j'ai peut-être fait quelque chose de mal donc j'ai essayé tout à l'heure de faire une application de test/migration contre une source de données SQLite3. J'ai exécuté les commandes suivantes:Scripts de migration DB sur les références

$ rails g scaffold SchoolClass name 
$ rails g scaffold Student name SchoolClass:references 

Et il a fait mes scripts de migration (avec tout le reste).

Migration script for dependent table with reference to Model

j'ai couru les scripts de migration SQLite3 et il a bien fonctionné.

Quand j'ai essayé de faire les mêmes étapes ci-dessus contre une source de données Postgres, je continuais à faire ce qui suit:

PG::UndefinedTable: ERROR: relation does not exist 

La seule façon que je suis passé cette question est si je suis entré dans le script de migration et mis à jour La ligne t.references remplace le nom de la classe par le nom de la table. Dans le guide de migration Rails (http://guides.rubyonrails.org/v2.3/migrations.html#special-helpers), il est indiqué pour l'assistant de références que vous passez le nom du modèle. Dans le cas de Postgres, cela ne semble pas être le cas.

C'est une solution assez simple pour remplacer les noms de modèles par des noms de tables, mais j'ai une tonne de tables à migrer et chaque table peut avoir un bon nombre de références. Quelqu'un a-t-il déjà vu cela, et existe-t-il un moyen de continuer à utiliser l'utilitaire d'échafaudage pour effectuer des migrations?

Appréciant toute assistance utile,

  • Joe

Répondre

1

Il devrait être t.references :school_class au lieu de :SchoolClass et commande d'échafaudage est correct rails g scaffold Student name school_class:references. Voir rails guides on naming conventions