【问题标题】:undefined method 'devise' for User用户的未定义方法“设计”
【发布时间】:2014-07-31 16:08:15
【问题描述】:

我一直在努力掌握设计及其工作原理,但在第一个障碍中有点落伍。我查看了几个地方,但似乎无法准确找到出现此错误的人。

所以我创建了一个带有索引视图的简单 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)>'

我不知道为什么用户模型无法找到“设计”方法,而据我所知,它肯定存在。

我在使用 rake 路由、rails 服务器和 rails 控制台时遇到了类似的错误。

如果有帮助,我正在使用 ruby​​ 2.1.1 以获取更多信息?

【问题讨论】:

  • 您似乎错过了安装设计初始化程序的一步。你运行rails generate devise:install 命令了吗?
  • 在使用“管理员”模型时也遇到了这个问题——我已经运行了所有必要的步骤......
  • 我遇到了这个问题,因为之前执行rails g devise userrails g devise:install 我解决了这个问题,stackoverflow.com/a/65554117/1873466

标签: ruby-on-rails ruby devise


【解决方案1】:

devise 添加到您的应用程序Gemfile 并通过运行bundle install 进行安装。在此之后,您应该运行以下生成器命令:

rails generate devise:install

此生成器将安装一个初始化程序your_application/config/initializers/devise.rb,其中包含所有设计的配置选项。

您错过了上述步骤,这就是未设置设计配置并且您在模型类User 中收到undefined method 'devise' for User 错误的原因。

【讨论】:

  • 不要忘记命令中的 :。我的电子书阅读器几乎没有使 : 可见。
【解决方案2】:

我在配置 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) 来自 routes.rb 的评论:

#devise_for :sessions

3) 再次运行rails generate devise:install,您应该会看到这次创建了一些文件。希望你能成功!

4) 取消注释 1) 和 2)

5) 执行:rake db:migrate

在这一点上它应该可以工作。希望它可以帮助某人!

【讨论】:

    【解决方案3】:

    我有同样的问题,但有其他原因。这对某人来说也可能是个问题。停止 Rails 服务器 然后输入

     rails s
    

    重启

    【讨论】:

    • 当您有足够的代表时,应该将其作为评论添加到原始问题或正在改进的答案中。
    【解决方案4】:

    我已经运行了生成器 $ rails generate devise:install,但遇到了同样的问题。

    无论如何它对我有用:将extend Devise::Models 添加到用户模型。

    【讨论】:

    • IMO 这应该是正确的答案——它不排除在 Rails 中使用 Devise 的人。对于共享同一数据库的服务,将模型保存在单独的 gem 中是一种常见的模式。
    【解决方案5】:

    除了Kirti对跑步的回答

    rails generate devise:install
    

    您可能希望将设计初始化程序重命名为

    config/initializers/01_devise.rb
    

    因为如果任何其他初始化程序(例如 config/initializers/active_admin.rb)在设计之前运行并触及 ApplicationController,您将得到相同的错误。

    根据 http://guides.rubyonrails.org/configuring.html#using-initializer-files 您可以使用文件命名来控制初始化程序的加载顺序。

    【讨论】:

      【解决方案6】:

      我有同样的问题。解决方法是取消注释:

      require 'devise/orm/active_record'
      

      config/initializers/active_admin.rb.

      我之前故意将其注释掉,因为文档说:“支持:active_record(默认)”。

      【讨论】:

      • 在我使用 gem devise_token_auth 的情况下,我必须将其添加到 config/devise_token_auth.rb
      【解决方案7】:

      所以当我这样做时,我也遇到了同样的错误:

      rails g 控制器客户端/时间表

      原来问题出在生成的帮助器上:

      app/helpers/client/timesheet_helper.rb:

      module Client::TimesheetHelper
      end
      

      客户端是一个使用用户模型的单表继承的模型。有些事情让她很困惑,因为 Client 是一个模型(类)和一个模块,这导致了这个神秘的错误消息。

      YMMV.

      【讨论】:

        【解决方案8】:

        我在安装 Devise 和 Mongoid 时遇到了同样的错误,但忘记在 config/initializers/devise.rb 中将 orm 从 active_record 更改为 mongoid

        应该是:

        require 'devise/orm/mongoid'
        

        【讨论】:

          【解决方案9】:

          我不得不停止 Spring 预加载器进程:

          spring stop
          

          现在按预期工作

          【讨论】:

            【解决方案10】:

            我遇到了这个问题,因为在rails g devise:install之前执行了rails g devise user

            我解决了这个问题,在 config/routes.rb 处删除行 devise_for :users 并删除db/migrate/xxxxxx_add_devise_to_users.rb

            现在运行

            rails g devise:install
            
            rails g devise user
            

            【讨论】:

              【解决方案11】:

              扩展设计::模型

              class User < ActiveRecord::Base
                extend Devise::Models
                # Include default devise modules. Others available are:
                # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
                devise :database_authenticatable, :registerable,
                       :recoverable, :rememberable, :validatable
                include DeviseTokenAuth::Concerns::User
              end
              

              参考:https://dev.to/risafj/guide-to-devisetokenauth-simple-authentication-in-rails-api-pfj

              【讨论】:

                【解决方案12】:

                注释掉:-

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

                user.rb 模型中。这对我有用

                【讨论】:

                • 关闭设计功能。我的答案是在运行 rails generate devise:install 后重新启动 rails 服务器
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多