Undefined метод 'devise' для пользователя

Я искал, чтобы справиться с изобретением и его разработками и как-то упал при первом препятствии. Я посмотрел в нескольких местах, но, похоже, не смог найти кого-то с этой ошибкой.

Итак, я создал простой Домашний контроллер с индексным представлением и добавил корневой индекс home #, а также обеспечил настройку параметров url по умолчанию в файле development.rb. Затем я просто набрал:

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/[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)>'

Im в недоумении относительно того, почему модель User не может найти метод "devise", когда, насколько я вижу, он определенно существует.

Я получаю схожие ошибки с рейк-маршрутами, сервером rails server и rails console.

Для получения дополнительной информации я использую ruby ​​2.1.1, если это помогает?

Ответ 1

Добавьте devise в ваше приложение Gemfile и установите его, запустив bundle install. После этого вы должны запустить следующую команду генератора:

rails generate devise:install

Этот генератор установит инициализатор your_application/config/initializers/devise.rb, который состоит из всех параметров конфигурации Devise.

Вы пропустили вышеупомянутый шаг, поэтому конфигурации конфигурации не установлены, и вы получаете ошибку undefined method 'devise' for User в классе модели User.

Ответ 2

У меня такая же проблема, но по другой причине. это может быть проблемой для кого-то. Сервер стоп-рельсов и затем введите

 rails s

до перезапустить его

Ответ 3

В дополнение к ответу Кирти

rails generate devise:install

вы можете переименовать инициализатор разработки в

config/initializers/01_devise.rb

потому что, если какой-либо другой инициализатор (такой как config/initializers/active_admin.rb) запускается до разработки и затрагивает ApplicationController, вы получите ту же ошибку.

И согласно http://guides.rubyonrails.org/configuring.html#using-initializer-files вы управляете порядком загрузки инициализаторов, используя имена файлов.

Ответ 4

Я запустил генератор $ rails generate devise:install, но получил ту же проблему.

В любом случае это работает со мной: добавьте extend Devise::Models в модели пользователя.

Ответ 5

У меня возникла аналогичная проблема, когда я настраивал 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) Комментарий от route.rb:

#devise_for :sessions

3) Запустите rails generate devise:install снова, вы увидите, что на этот раз создаются некоторые файлы. Надеюсь, вы это сработаете!

4) Раскомментирование из 1) и 2)

5) Выполнить: rake db:migrate

И на этом этапе это должно сработать. Надеюсь, это поможет кому-то!

Ответ 6

Итак, у меня была такая же ошибка, когда я сделал:

rails g клиент/расписания контроллера

Оказалось, что проблема связана с сгенерированным помощником:

Приложение/хелперы/клиент/timesheet_helper.rb:

module Client::TimesheetHelper
end

Клиент - это модель, использующая Single Table Inheritance для модели пользователя. Что-то ее очень смешивало, что с Клиентом - модель (класс) и модуль, и это приводит к этому загадочному сообщению об ошибке.

YMMV.

Ответ 7

У меня такая же ошибка, когда я установил Devise и Mongoid, но забыл изменить orm из active_record в mongoid в config/initializers/devise.rb

Должно быть:

require 'devise/orm/mongoid'

Ответ 8

У меня была такая же проблема. Исправление было раскомментировано:

require 'devise/orm/active_record'

в config/initializers/active_admin.rb.

Я сознательно прокомментировал это раньше, потому что в документации говорится: "Поддерживает: active_record (по умолчанию)".

Ответ 9

Комментарий: -

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

в user.rb Модель. Это сработало для меня