8 votes

Migration de devise ne fonctionne pas

J'ai créé un modèle utilisateur en utilisant Devise et chaque fois que j'utilise rake db:migrate, je reçois le problème suivant :

==  DeviseCreateUsers: migration en cours ==============================================
-- création_table(:utilisateurs)
rake annulé !
Une erreur s'est produite, cette migration et toutes les suivantes ont été annulées :

méthode indéfinie `database_authenticatable' pour #

Tâches : SOMMET => db:migrate
(Voir la trace complète en exécutant la tâche avec --trace)

J'ai exécuté la trace complète avec la fonction --trace mais je n'arrive pas à comprendre quel est le problème. Voici le fichier de migration :

class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
  t.database_authenticatable :null => false
  t.recoverable
  t.rememberable
  t.trackable
  t.confirmable

  # t.encryptable
  # t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
  # t.token_authenticatable

  t.timestamps
 end

add_index :users, :email,                :unique => true
add_index :users, :reset_password_token, :unique => true
add_index :users, :confirmation_token,   :unique => true
# add_index :users, :unlock_token,         :unique => true
# add_index :users, :authentication_token, :unique => true
end

def self.down
  drop_table :users
  end
end

22voto

Amir Rubin Points 742

Devise 2.0 a éliminé les fonctions d'aide pour créer les tables de la base de données:

https://github.com/plataformatec/devise/wiki/How-To:-Upgrade-to-Devise-2.0-migration-schema-style

Donc ce dont vous avez besoin est:

create_table(TABLE_NAME) do |t|
  ## Authentification de la base de données

  t.string :email,              :null => false, :default => ""
  t.string :encrypted_password, :null => false, :default => ""

  ## Récupérable
  t.string   :reset_password_token
  t.datetime :reset_password_sent_at

  ## Mémorisation
  t.datetime :remember_created_at

  ## Traçabilité
  t.integer  :sign_in_count, :default => 0
  t.datetime :current_sign_in_at
  t.datetime :last_sign_in_at
  t.string   :current_sign_in_ip
  t.string   :last_sign_in_ip

  t.timestamps

end

2voto

colinross Points 1786

Content de l'entendre. Je suppose que la réponse officielle serait de recommencer les étapes :

rails g devise:install

rails g devise user

rake db:migrate

rails s // redémarrer votre serveur, juste au cas où...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X