web-dev-qa-db-fra.com

méthode non définie 'élaborer' pour l'utilisateur

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?

31
JonleePeakman

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.

77
Kirti Thorat

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

17
mmike

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.

10
Kevin Kohrt

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.

8
abla

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!

8

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'
0
nachbar

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.

0
Sam Stickland

J'ai dû arrêter le processus de préchargement du printemps:

spring stop

Fonctionne maintenant comme prévu

0
Szymon Rut