未定义的方法'设计'为用户

时间:2014-06-10 18:50:36

标签: ruby-on-rails ruby devise

我一直在寻找设计及其运作的方法,并且在第一道障碍时有点堕落。我已经查看了几个地方,但似乎找不到有这个错误的人。

所以我创建了一个带有索引视图的简单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,如果有帮助吗?

11 个答案:

答案 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 模型中的

。这对我有用