Je travaille sur le tutoriel Rails et je suis resté bloqué. À partir du Listing 8.16, j'ai apporté les modifications suivantes à <timestamp>_add_remember_token_to_users.rb
:
class AddRememberTokenToUsers < ActiveRecord::Migration
def change
add_column :users, :remember_token, :string
add_index :users, :remember_token
end
end
Le guide dit ensuite de mettre à jour dev & test db comme d'habitude:
$ bundle exec rake db:migrate
$ bundle exec rake db:test:prepare
Mon test utilisateur pour le * Remember_token * échoue toujours, j'ai donc jeté un œil à la table tilisateur dans dev et teste la base de données avec la ligne de commande sqlite3. Ils ressemblent à ceci:
sqlite> .schema users
CREATE TABLE "users" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" varchar(255),
"email" varchar(255),
"created_at" datetime NOT NULL,
"updated_at" datetime NOT NULL,
"password_digest" varchar(255));
CREATE UNIQUE INDEX "index_users_on_email" ON "users" ("email");
Il semble que ma migration n'ait pas encore été exécutée mais je ne sais pas comment la forcer à s'exécuter.
Essayez de reconstruire la structure de votre base de données (AVERTISSEMENT: toutes les données db seront perdues):
rake db:drop:all
rake db:create:all
rake db:migrate
Si vous utilisez Rails <4.1, n'oubliez pas de préparer la base de données de test:
rake db:test:prepare
Il s'agit de la solution la plus simple puisque vous travaillez avec un didacticiel. Cependant, en production ou ayant des données importantes en développement, vous devriez prendre le temps d'étudier le problème. Dans ce cas, vous avez probablement créé une migration vide, exécuté rake db:migrate
, puis a ajouté des instructions à la migration, de sorte que vous ne voyez pas un nouveau champ et plus loin rake db:migrate
ne fait rien. Pour résoudre ce problème, vous devez commenter vos instructions change
, effectuez rake db:rollback
, supprimez les commentaires, puis rake db:migrate
pour appliquer les instructions que vous avez manquées.
J'avais le même problème que la question initiale. $ bundle exec rake db:migrate
n'ajoutait pas Remember_token au .db et la réponse de Latha Doddikadi a fonctionné pour moi.
J'ai fait:
rake db:rollback
puis:
$ bundle exec rake db:migrate
qui a ajouté le champ Remember_token à la base de données suivi de:
bundle exec rspec spec/models/user_spec.rb
qui a passé.
Finished in 0.92841 seconds
21 examples, 0 failures
Revenez en arrière, puis relancez la migration, cela pourrait fonctionner.
rake db:rollback
Et après avoir reculé, relancez vos migrations.