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?
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
.
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
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.
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.
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)".
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'
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.
Ich musste den Spring Preloader-Prozess stoppen:
spring stop
Funktioniert jetzt wie erwartet