wake-up-neo.com

undefinierte Methode 'devise' für Benutzer

Ich habe mich mit dem Gerät und seiner Arbeitsweise auseinandergesetzt und bin an der ersten Hürde gefallen. Ich habe an einigen Stellen nachgesehen, aber ich kann niemanden mit diesem Fehler genau finden.

Also habe ich einen einfachen Home-Controller mit einer Indexansicht erstellt und root 'home # index' hinzugefügt und sichergestellt, dass die Standard-URL-Optionen in der Datei development.rb festgelegt sind. Ich habe dann einfach getippt:

Rails generate devise User

Dadurch wurde meine user.rb-Datei in Modellen mit folgendem erstellt:

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

Ziemlich einfach bis jetzt, ich habe folgendes Gemfile:

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'

Und wenn ich eines von rake db: migrate starte, erhalte ich die folgende Fehlermeldung:

rake aborted!
NoMethodError: undefined method `devise' for User (call 'User.connection' to establish a connection):Class
/home/jonlee/.rvm/gems/[email protected]_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)>'

Ich kann nicht verstehen, warum das Benutzermodell die Methode "devise" nicht finden kann, wenn es meines Erachtens definitiv da ist.

Ähnliche Fehler bekomme ich bei Rake-Routen, Rails-Server und Rails-Konsole.

Für weitere Informationen verwende ich Ruby 2.1.1, wenn das hilft?

31
JonleePeakman

Fügen Sie devise zu Ihrer Anwendung Gemfile hinzu und installieren Sie sie, indem Sie bundle install ausführen. Danach sollten Sie den folgenden Generatorbefehl ausführen:

Rails generate devise:install

Dieser Generator installiert einen Initialisierer your_application/config/initializers/devise.rb, der alle Konfigurationsoptionen von Devise enthält. 

Sie haben den oben genannten Schritt verpasst, weshalb die Gerätekonfigurationen nicht festgelegt sind, und Sie erhalten einen undefined method 'devise' for User-Fehler in Ihrer Modellklasse User.

77
Kirti Thorat

Ich habe das gleiche Problem, aber aus einem anderen Grund. Dies kann auch für jemanden ein Problem sein. Stoppen Sie den Rails-Server .__ und geben Sie dann ein

 Rails s

neu starten

17
mmike

Neben Kirtis Antwort vom Laufen

Rails generate devise:install

möglicherweise möchten Sie den Gerät-Initialisierer in umbenennen

config/initializers/01_devise.rb

wenn ein anderer Initialisierer (wie config/initializers/active_admin.rb) ausgeführt wird, bevor devise den ApplicationController berührt und den ApplicationController berührt, wird derselbe Fehler angezeigt.

Und entsprechend http://guides.rubyonrails.org/configuring.html#using-initializer-files Steuern Sie die Reihenfolge der Initialisierungen anhand der Dateinamen.

10
Kevin Kohrt

Ich habe den Generator $ Rails generate devise:install ausgeführt, habe aber das gleiche Problem.

Wie auch immer, es funktioniert für mich: Fügen Sie den User-Modellen extend Devise::Models hinzu.

8
abla

Bei der Konfiguration von Devise (Ruby 2.4.1/Rails 5.1.2) bin ich auf ein ähnliches Problem gestoßen. In meinem Fall scheinen die folgenden Dateien nach meiner Ausführung nicht erstellt worden zu sein: Rails generate devise:install zum ersten Mal.

create  config/initializers/devise.rb
create  config/locales/devise.en.yml

Schritte, denen ich folgte:

1) Kommentieren Sie von Ihrem MODELL folgendes:

  #devise :database_authenticatable, :registerable,
     #:recoverable, :rememberable, :trackable, :validatable

2) Kommentar von routes.rb:

#devise_for :sessions

3) Führen Sie Rails generate devise:install erneut aus. Sie sollten nun sehen, dass einige Dateien erstellt werden. Ich hoffe es funktioniert!

4) Kommentar von 1) & 2)

5) Ausführen: rake db:migrate

Und an diesem Punkt sollte es funktionieren. Hoffe es hilft jemandem!

Ich hatte das gleiche Problem. Die Lösung bestand darin, folgende Kommentare zu entfernen:

require 'devise/orm/active_record'

im config/initializers/active_admin.rb.

Ich habe es zuvor absichtlich auskommentiert, weil in der Dokumentation steht: "Unterstützt: active_record (Standard)".

3
Artur Bilski

Ich habe die gleiche Fehlermeldung erhalten, als ich Devise und Mongoid installiert habe, aber ich habe vergessen, den orm von active_record in mongoid in config/initializers/devise.rb zu ändern

Sollte sein:

require 'devise/orm/mongoid'
0
nachbar

Ich hatte also genau diesen Fehler, als ich es tat:

Rails g Controller-Client/Arbeitszeittabellen

Es stellte sich heraus, dass das Problem beim generierten Helfer lag:

app/helpers/client/timesheet_helper.rb:

module Client::TimesheetHelper
end

Client ist ein Modell, das die Vererbung einzelner Tabellen aus dem Benutzermodell verwendet. Sie wurde etwas durcheinander geraten, wobei Client ein Modell (Klasse) und ein Modul war, was zu dieser kryptischen Fehlermeldung führt.

YMMV.

0
Sam Stickland

Ich musste den Spring Preloader-Prozess stoppen:

spring stop

Funktioniert jetzt wie erwartet

0
Szymon Rut