web-dev-qa-db-ja.com

ユーザー用の未定義メソッド「devise」

私は工夫とその仕組みを理解しようと思っていて、最初のハードルで落ちました。私はいくつかの場所を調べましたが、このエラーのある人を正確に見つけることができないようです。

そのため、インデックスビューを使用して単純な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が役立ちますか?

35
JonleePeakman

deviseをアプリケーションGemfileに追加し、bundle installを実行してインストールします。この後、次のジェネレーターコマンドを実行する必要があります。

Rails generate devise:install

このジェネレーターは、すべてのDeviseの構成オプションで構成されるイニシャライザーyour_application/config/initializers/devise.rbをインストールします。

上記のステップを見逃したため、デバイス構成が設定されず、モデルクラスUserundefined method 'devise' for Userエラーが表示されます。

84
Kirti Thorat

私は同じ問題を抱えていますが、他の理由があります。これは誰かにとっても問題になる可能性があります。 Rails serverを停止してから入力します

 Rails s

to 再起動

17
mmike

ジェネレーター$ Rails generate devise:installを実行しましたが、同じ問題が発生しました。

とにかく動作します:extend Devise::Modelsをユーザーモデルに追加します。

11
abla

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 に従って、ファイルの命名を使用して初期化子のロード順序を制御します。

10
Kevin Kohrt

同じ問題がありました。修正はコメント解除することでした:

require 'devise/orm/active_record'

config/initializers/active_admin.rb

ドキュメンテーションに「Supports:active_record(default)」と書かれているため、意図的にコメントアウトしました。

3
Artur Bilski

DeviseとMongoidをインストールしたときに同じエラーが発生しましたが、config/initializers/devise.rbでormをactive_recordからmongoidに変更するのを忘れました

する必要があります:

require 'devise/orm/mongoid'
0
nachbar

そのため、同じエラーが発生しました。

Rails Gコントローラークライアント/タイムシート

問題は生成されたヘルパーにあることが判明しました。

app/helpers/client/timesheet_helper.rb:

module Client::TimesheetHelper
end

クライアントは、ユーザーモデルの単一テーブル継承を使用するモデルです。クライアントがモデル(クラス)およびモジュールであるため、何かが彼女を非常に混乱させていたため、この不可解なエラーメッセージが表示されます。

YMMV。

0
Sam Stickland

Springプリローダープロセスを停止する必要がありました。

spring stop

期待どおりに動作するようになりました

0
Szymon Rut