Je cherchais à comprendre le mécanisme et son fonctionnement et suis tombé en quelque sorte au premier obstacle. J'ai regardé dans quelques endroits mais n'arrive pas à trouver quelqu'un avec cette erreur exactement.
J'ai donc créé un contrôleur Home simple avec une vue d'index et ajouté la racine 'home # index', tout en veillant à ce que les options d'URL par défaut soient configurées dans le fichier development.rb. J'ai alors simplement tapé:
Rails generate devise User
Cela a créé mon fichier user.rb dans les modèles avec les éléments suivants:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
end
Assez simple jusqu'à présent, j'ai le Gemfile suivant:
source 'https://rubygems.org'
gem 'Rails', '4.0.5'
gem 'sqlite3'
gem 'sass-Rails', '~> 4.0.2'
gem 'devise'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-Rails', '~> 4.0.0'
gem 'jquery-Rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
group :doc do
gem 'sdoc', require: false
end
gem 'bcrypt'
Et quand j'exécute rake db: migrate j'obtiens l'erreur suivante:
rake aborted!
NoMethodError: undefined method `devise' for User (call 'User.connection' to establish a connection):Class
/home/jonlee/.rvm/gems/Ruby-2.1.1@railstutorial_Rails_4_0/gems/activerecord-4.0.5/lib/active_record/dynamic_matchers.rb:22:in `method_missing'
/home/jonlee/Projects/Rails/userauth/app/models/user.rb:4:in `<class:User>'
/home/jonlee/Projects/Rails/userauth/app/models/user.rb:1:in `<top (required)>'
Je ne comprends pas pourquoi le modèle User ne parvient pas à trouver la méthode «élaborée» alors que, autant que je sache, elle existe bel et bien.
Je reçois des erreurs similaires avec les routes rake, le serveur Rails et la console Rails.
Pour plus d'informations, j'utilise Ruby 2.1.1 si cela vous aide?
Ajoutez devise
à votre application Gemfile
et installez-la en exécutant bundle install
. Après cela, vous devez exécuter la commande suivante du générateur:
Rails generate devise:install
Ce générateur installera un initialiseur your_application/config/initializers/devise.rb
composé de toutes les options de configuration de Devise.
Vous avez manqué l'étape mentionnée ci-dessus, c'est pourquoi les configurations d'imprimante ne sont pas définies et vous recevez une erreur undefined method 'devise' for User
dans votre classe de modèle User
.
J'ai le même problème, mais pour une autre raison. cela peut aussi être un problème pour quelqu'un. Arrêtez le serveur Rails , Puis tapez
Rails s
pour le redémarrer
En plus de la réponse de Kirti de courir
Rails generate devise:install
vous voudrez peut-être renommer l’initialiseur de carte en
config/initializers/01_devise.rb
en effet, si un autre initialiseur (tel que config/initializers/active_admin.rb) s'exécute avant le montage et touche l'ApplicationController, vous obtiendrez la même erreur.
Et selon http://guides.rubyonrails.org/configuring.html#using-initializer-files Vous contrôlez l'ordre de chargement des initialiseurs à l'aide de la dénomination de fichier.
J'ai exécuté le générateur $ Rails generate devise:install
mais j'ai le même problème.
Quoi qu'il en soit, cela fonctionne pour moi: Ajoutez extend Devise::Models
aux modèles utilisateur.
J'ai rencontré un problème similaire lors de la configuration de Devise (Ruby 2.4.1/Rails 5.1.2). Dans mon cas, il semble que les fichiers suivants n'aient pas été créés après l'exécution: Rails generate devise:install
pour la première fois.
create config/initializers/devise.rb
create config/locales/devise.en.yml
Les étapes que j'ai suivies:
1) Commentez de votre modèle ce qui suit:
#devise :database_authenticatable, :registerable,
#:recoverable, :rememberable, :trackable, :validatable
2) Commentaire de routes.rb:
#devise_for :sessions
3) Exécutez à nouveau Rails generate devise:install
, vous devriez voir que certains fichiers sont créés cette fois. J'espère que ça marche!
4) Ne commentez pas les 1) et 2)
5) Exécuter: rake db:migrate
Et à ce stade, cela devrait fonctionner. J'espère que ça aide quelqu'un!
J'ai eu la même erreur quand j'ai installé Devise et Mongoid, mais j'ai oublié de changer le nom actif d'active_record en mongoid dans config/initializers/invent.rb
Devrait être:
require 'devise/orm/mongoid'
Donc, j'ai juste eu cette même erreur surgir quand je l'ai fait:
Rails g contrôleur client/feuilles de temps
Il s'est avéré que le problème venait de l'aide générée:
app/helpers/client/timesheet_helper.rb:
module Client::TimesheetHelper
end
Le client est un modèle qui utilise l'héritage de table unique en dehors du modèle utilisateur. Quelque chose la mélangeait de plus en plus, Client étant un modèle (classe) et un module, ce message d'erreur cryptique.
YMMV.
J'ai dû arrêter le processus de préchargement du printemps:
spring stop
Fonctionne maintenant comme prévu