it-roy-ru.com

неопределенный метод devise для пользователя

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

Итак, я создал простой контроллер Home с представлением индекса и добавил корневой «home # index», а также обеспечил настройку параметров 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)>'

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

Я получаю похожие ошибки с граблями, сервером Rails и консолью Rails.

Для дальнейшей информации я использую Ruby 2.1.1, если это поможет?

31
JonleePeakman

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

Rails generate devise:install

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

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

77
Kirti Thorat

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

 Rails s

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

17
mmike

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

Rails generate devise:install

вы можете переименовать инициализатор устройства в

config/initializers/01_devise.rb

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

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

10
Kevin Kohrt

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

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

8
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) Комментарий от rout.rb:

#devise_for :sessions

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

4) Раскомментируйте с 1) и 2)

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

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

8
Stefan Ciprian Hotoleanu

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

require 'devise/orm/active_record'

в config/initializers/active_admin.rb.

Я специально прокомментировал это ранее, потому что документация гласит: «Supports: active_record (по умолчанию)».

2
Artur Bilski

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

Должно быть:

require 'devise/orm/mongoid'
0
nachbar

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

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

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

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

module Client::TimesheetHelper
end

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

YMMV.

0
Sam Stickland

Мне пришлось остановить процесс предварительной загрузки Spring:

spring stop

Теперь работает как положено

0
Szymon Rut