私は工夫とその仕組みを理解しようと思っていて、最初のハードルで落ちました。私はいくつかの場所を調べましたが、このエラーのある人を正確に見つけることができないようです。
そのため、インデックスビューを使用して単純なHomeコントローラーを作成し、ルート 'home#index'を追加し、development.rbファイルにデフォルトのURLオプションが設定されていることを確認しました。次に、単に入力しました:
Rails generate devise User
これにより、以下のモデルでuser.rbファイルが作成されました。
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
これまでのところ非常に簡単で、次の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'
そして、rake db:migrateを実行すると、次のエラーが表示されます。
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)>'
Userモデルが「devise」メソッドを見つけることができない理由については、私が見る限りでは間違いなくそこにあるのに困っています。
Rails serverおよびRails console。
さらに情報が必要な場合は、Ruby 2.1.1が役立ちますか?
devise
をアプリケーションGemfile
に追加し、bundle install
を実行してインストールします。この後、次のジェネレーターコマンドを実行する必要があります。
Rails generate devise:install
このジェネレーターは、すべてのDeviseの構成オプションで構成されるイニシャライザーyour_application/config/initializers/devise.rb
をインストールします。
上記のステップを見逃したため、デバイス構成が設定されず、モデルクラスUser
でundefined method 'devise' for User
エラーが表示されます。
私は同じ問題を抱えていますが、他の理由があります。これは誰かにとっても問題になる可能性があります。 Rails serverを停止してから入力します
Rails s
to 再起動
ジェネレーター$ Rails generate devise:install
を実行しましたが、同じ問題が発生しました。
とにかく動作します:extend Devise::Models
をユーザーモデルに追加します。
Deviseを設定しているときに、同様の問題に遭遇しました(Ruby 2.4.1/Rails 5.1.2)。私の場合、実行後に以下のファイルが作成されなかったようです:Rails generate devise:install
初めて。
create config/initializers/devise.rb
create config/locales/devise.en.yml
私が従った手順:
1)次のモデルからコメントします。
#devise :database_authenticatable, :registerable,
#:recoverable, :rememberable, :trackable, :validatable
2)routes.rbからのコメント:
#devise_for :sessions
3)Rails generate devise:install
再び、今回はいくつかのファイルが作成されていることを確認する必要があります。うまくいきますように!
4)1)および2)からコメント解除
5)実行:rake db:migrate
そして、この時点で動作するはずです。それが誰かを助けることを願っています!
ランニングのキルティの答えに加えて
Rails generate devise:install
devise初期化子の名前を
config/initializers/01_devise.rb
他の初期化子(config/initializers/active_admin.rbなど)がdeviseの前に実行され、ApplicationControllerに触れると、同じエラーが発生するためです。
http://guides.rubyonrails.org/configuring.html#using-initializer-files に従って、ファイルの命名を使用して初期化子のロード順序を制御します。
同じ問題がありました。修正はコメント解除することでした:
require 'devise/orm/active_record'
config/initializers/active_admin.rb
。
ドキュメンテーションに「Supports:active_record(default)」と書かれているため、意図的にコメントアウトしました。
DeviseとMongoidをインストールしたときに同じエラーが発生しましたが、config/initializers/devise.rbでormをactive_recordからmongoidに変更するのを忘れました
する必要があります:
require 'devise/orm/mongoid'
そのため、同じエラーが発生しました。
Rails Gコントローラークライアント/タイムシート
問題は生成されたヘルパーにあることが判明しました。
app/helpers/client/timesheet_helper.rb:
module Client::TimesheetHelper
end
クライアントは、ユーザーモデルの単一テーブル継承を使用するモデルです。クライアントがモデル(クラス)およびモジュールであるため、何かが彼女を非常に混乱させていたため、この不可解なエラーメッセージが表示されます。
YMMV。
Springプリローダープロセスを停止する必要がありました。
spring stop
期待どおりに動作するようになりました