我一直在寻找设计及其运作的方法,并且在第一道障碍时有点堕落。我已经查看了几个地方,但似乎找不到有这个错误的人。
所以我创建了一个带有索引视图的简单Home控制器,并添加了root' 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)>'
我不知道为什么用户模型无法找到&#39;设计&#39;方法,就我所知,它绝对存在。
我在rake路由,rails服务器和rails控制台上遇到了类似的错误。
有关详细信息,我使用ruby 2.1.1,如果有帮助吗?
答案 0 :(得分:81)
将devise
添加到您的应用Gemfile
并通过运行bundle install
进行安装。在此之后,您应该运行以下生成器命令:
rails generate devise:install
此生成器将安装初始化程序your_application/config/initializers/devise.rb
,其中包含所有Devise的配置选项。
您错过了上述步骤,这就是为什么没有设置设计配置而您在模型类undefined method 'devise' for User
中收到User
错误的原因。
答案 1 :(得分:17)
我有同样的问题,但有其他原因。这对某些人来说也可能是个问题。停止rails服务器 然后键入
rails s
重新启动
答案 2 :(得分:11)
我运行了生成器$ rails generate devise:install
,但遇到了同样的问题。
无论如何,它对我有用:将extend Devise::Models
添加到用户模型。
答案 3 :(得分:10)
除了Kirti的运行答案
rails generate devise:install
您可能希望将设计初始值设定项重命名为
config/initializers/01_devise.rb
因为如果在设计和触摸ApplicationController之前运行任何其他初始化程序(例如config / initializers / active_admin.rb),您将得到相同的错误。
根据 http://guides.rubyonrails.org/configuring.html#using-initializer-files 您可以使用文件命名控制初始化程序的加载顺序。
答案 4 :(得分:10)
在配置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)从您的MODEL中评论以下内容:
#devise :database_authenticatable, :registerable,
#:recoverable, :rememberable, :trackable, :validatable
2)来自routes.rb的评论:
#devise_for :sessions
3)再次运行rails generate devise:install
,您应该看到这次创建了一些文件。希望你的作品!
4)取消评论1)&amp; 2)
5)执行:rake db:migrate
此时它应该有效。希望它可以帮助别人!
答案 5 :(得分:2)
我有同样的问题。修复是取消注释:
require 'devise/orm/active_record'
config/initializers/active_admin.rb
中的。
我之前故意评论过它,因为文档说:&#34;支持:active_record(默认)&#34;。
答案 6 :(得分:0)
所以当我这样做时,我刚刚出现了同样的错误:
rails g controller client / timesheets
事实证明,问题在于生成的助手:
应用程序/助手/客户端/ timesheet_helper.rb:
module Client::TimesheetHelper
end
客户端是一种使用User模型的单表继承的模型。有些事情变得非常混乱,客户端是模型(类)和模块,导致这个神秘的错误消息。
因人而异。
答案 7 :(得分:0)
当我安装Devise和Mongoid时遇到了同样的错误,但忘记在config / initializers / devise.rb中将orm从active_record更改为mongoid
应该是:
require 'devise/orm/mongoid'
答案 8 :(得分:0)
我不得不停止Spring预加载器过程:
spring stop
现在可以正常工作
答案 9 :(得分:0)
我遇到这个问题是因为在 rails g devise user
之前执行了 rails g devise:install
我解决了这个问题,删除了 devise_for :users
处的 config/routes.rb
并删除 db/migrate/xxxxxx_add_devise_to_users.rb
现在运行
rails g devise:install
rails g devise user
答案 10 :(得分:-2)
ViewHolder
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
模型中的。这对我有用