名称错误:未初始化常量用户。

8

我正在使用Rails composer中的rails-devise应用程序。一切似乎都很好,直到我尝试在控制台中与模型交互。

我尝试了以下命令:

rails console
User.all

我从控制台得到了以下错误:

NameError: uninitialized constant User
from (irb):2
from /Users/msarr/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/console.rb:110:in `start'
from /Users/msarr/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/console.rb:9:in `start'
from /Users/msarr/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:68:in `console'
from /Users/msarr/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands/commands_tasks.rb:39:in `run_command!'
from /Users/msarr/.rvm/gems/ruby-2.2.1/gems/railties-4.2.5.1/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/msarr/Desktop/deployment/YouServe/bin/rails:9:in `<top (required)>'
from /Users/msarr/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from /Users/msarr/.rvm/rubies/ruby-2.2.1/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb:54:in `require'
from -e:1:in `<main>'

这是我的Gemfile文件:
  source 'https://rubygems.org'
  ruby '2.2.1'
  gem 'rails', '4.2.5.1'
  gem 'sass-rails', '~> 5.0'
  gem 'uglifier', '>= 1.3.0'
  gem 'coffee-rails', '~> 4.1.0'
  gem 'jquery-rails'
  gem 'turbolinks'
  gem 'jbuilder', '~> 2.0'
  gem 'carrierwave'
  gem 'mini_magick'
  gem 'fog'                  
  gem 'administrate'
  gem 'devise'
  gem 'devise_invitable'
  gem 'foundation-rails', '~> 5.5'
  gem 'high_voltage'
  gem 'simple_form'

 group :development, :test do
  gem 'byebug'
  gem 'sqlite3'
end
group :development do
  gem 'web-console', '~> 2.0'
  gem 'spring'
  gem 'better_errors'
  gem 'hub', :require=>nil
  gem 'quiet_assets'
  gem 'rails_layout'
end

group :production do
 gem 'pg'
 gem 'rails_12factor'
 gem 'unicorn'
end

你运行了 rails generate devise User ; rake db:migrate 吗? - MilesStanfield
我尝试了,但它显示找不到生成器“devise”。 - codigomonstruo
如果你的gemfile文件中没有包含gem 'devise',那么请先添加它,然后运行bundle命令。 - MilesStanfield
Devise实际上包含在gem文件中。这太奇怪了。身份验证可以工作,但只是访问控制台中的模型是问题所在。 - codigomonstruo
3个回答

10

正在重新启动弹簧装载器。

spring stop

然后运行rails c,它能正常工作。


这对我来说可行,但是能否获得更多关于正在发生的情况的详细信息或文档?有长期解决方案吗? - Meekohi
@Meekohi Spring 是一个预加载器。你可以选择是否使用它,但它可以加速开发。请参见 rails/spring - floer32

1
你的项目架构是什么样子的?如果你的模型被包裹在模块或命名空间中(例如APIv1),那么你需要使用命名空间调用它们,例如V1::User.all。请注意,保留HTML标签。

-1
请确保在您的Gemfile中包含gem 'devise'并运行bundle
此外,您还需要运行以下命令。
rails generate devise:install
rails generate devise User
rake db:migrate

现在你应该能够在你的rails c中访问User.all了。

Devise 实际上已经包含在 gem 文件中了。这很奇怪。认证可以正常工作,但是在控制台中访问模型就有问题了。运行 "rails g devise User" 命令会出现 "Could not find generator 'devise'" 的错误提示。 - codigomonstruo
你的 Gemfile 文件中是否在 group :production do 后面添加了 gem 'devise' 或者其他类似的内容?如果你已经确认安装并且能够正常使用,那么这是我能想到的唯一原因导致你无法在控制台中使用生成器。 - MilesStanfield
谢谢你的帮助。我已经添加了我的 gem 文件。当我执行 bundle show devise 时,我得到了 /Users/me/.rvm/gems/ruby-2.2.1/gems/devise-3.5.6。 - codigomonstruo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接