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
Модель. Это сработало для меня