On Migration: méthode non définie `to_sym 'pour nil: NilClass
Je suis Rails 3.0.3 et j'ai accidentellement fait une faute de frappe dans ma migration: j'ai créé une migration qui crée une nouvelle colonne avec un type de boolen
(il doit avoir été boolean
). J'ai couru à la migration et des Rails de ne pas me prévenir que c'était une défaillance de type de colonne, qui, je l'aurais juré que dans les versions précédentes?
Maintenant, chaque fois que j'essaie d'ajouter, supprimer ou modifier quoi que ce soit dans une migration, j'obtiens l'erreur suivante:
undefined method `to_sym' for nil:NilClass
Je ne peux même pas l'annulation ou de chute. J'ai une version antérieure de la base de données et de l'arborescence de fichiers enregistrés, mais ce problème me rend fou, parce que ce n'est pas la première fois que j'ai vu cela se produire.
Comment puis-je éliminer efficacement la colonne sans avoir Rails de se plaindre (et de préférence sans creuser dans la base de données par part)?
source d'informationauteur Eric R.
Vous devez vous connecter pour publier un commentaire.
C'est un problème que j'ai eu avec des rails de migrations. Vous avez mal orthographié ou misordered un champ avec son nom. Voici ce que vous pouvez faire.
rake db:rollback
.rake db:rollback
jusqu'à ce que vous êtes là et le problème est résolu.Le problème est quelque chose comme cela. Avis de l'ordonnance sur la première et la vérification de l'orthographe sur le second. Ce sont deux problèmes que l'ont me donne la même situation que vous êtes maintenant qui est qui
to_sym
bs.Par exemple;
Laissez-moi savoir si vous avez plus de questions.
Si vous ne pouvez pas
rake db:rollback
ensuite procéder à une nouvelle migration, de supprimer la table donnant le problème, et de se régénérer. J'ai eu à le faire avant. Juste assurez-vous d'obtenir votre commande.Si vous utilisez la base de données SQLite, vous avez probablement vous obtenez cette erreur, car SQLLite ne fournit pas la chute de la colonne fonction.
http://www.sqlite.org/faq.html#q11
SQLLite vous suggère de créer une table temporaire avec uniquement les colonnes dont vous avez besoin à partir de votre table d'origine, le transfert de données, puis échangez les tables.
Comme vous l'avez mentionné dans vos commentaires à codeglot une fois que le dossier est dans votre base de données vous obtenez toujours l'erreur en essayant de supprimer la colonne.
Pour surmonter ce problème, vous pouvez exécuter manuellement des commandes sql dans votre migration
espère que cette aide
Vous pouvez également fixer la base de données à l'aide d'un outil de base de données. J'ai eu le même problème et a utilisé l'application "Base" pour MacOS X. Il vous permet de modifier le type de champ de bases de données sqlite.
Dans le fond, cela crée une nouvelle table avec les champs modifiés et copie les données de l'original. A fonctionné pour moi!
J'avais presque exactement le même problème (avait mal orthographié
bolean
) et ne pouvait pas obtenirrake db:rollback
de travailler, ni de déposer le nom de la colonne (en raison de SQLite3), à l'aide de Rails 4.0.2.Que je n'ai pas de soins si la DB de données a été supprimé, c'est la façon dont je l'ai corrigé:
rake db:drop
[timestamp]_migration_name.rb
fichier correctement direboolean
rake db:create
rake db:migrate
Si vous rencontrez le même problème lors de la restauration de nouveau, essayez de supprimer les défauts de la colonne dans la base de données manuellement. (Il y a une belle Firefox plugin appelé SQLite Manager.)
Puis exécutez la commande rollback, résoudre le problème dans le fichier de migration, et enfin migrer de nouveau. Cela vous permettra de rester dans les contraintes de Rails de migration.
J'ai eu une erreur similaire quand j'ai essayé de créer une table de jointure dans les Rails 4 et Ruby 2. Bien que la migration de code à l'air bien pour moi, c'était
id => true
ligne qui a provoqué le problème. Voici comment mon code de migration ressemblait quand j'ai obtenu l'erreur.C'est l'erreur que j'ai obtenu -
J'ai enlevé
:id => true
et le il a migré avec succès.Je sais que cela ne s'applique pas à votre question exactement. Mais si quelqu'un a ce problème, je suis sûr qu'ils vont trouver ce fil.
L'erreur:
est dû au fait que les Rails ne connais pas le type de la colonne. Pourquoi ne pas connaître le type? Parce que le type n'est pas dans le schéma.rb fichier. Dans mon cas, j'ai regardé pour la table avec le problème et trouvé:
J'ai changé l'origine de la migration à utiliser float au lieu de réel et le problème a disparu lorsque j'ai quitté la base de données et reconstruit à partir de zéro.
Dans mon cas je n'utilise SQLite pour le test et le développement où l'abandon de la base de données et de le reconstruire à partir de zéro est un fonctionnement normal. Nous utilisons une base de données différente qui n'ont pas ce problème dans la production, la modification la plus âgée de la migration fonctionne pour moi.
J'ai eu le même problème, parce qu'au lieu de "$rails generate migration add_reset_to_users reset_digest:string \