我有一个名为PhoneNumber的简单模型:
class PhoneNumber < ActiveRecord::Base
validates :pnumber, presence: true, on: :create #=> { :message => " cannot be blank" }
validates :pnumber, numericality: true, on: :create
end
我转到应用程序的根文件夹(包含app子文件夹的文件夹)并启动控制台:
rails console --sandbox
当我尝试创建一个空的PhoneNumber时(我想在验证失败时收到错误消息)我收到以下错误消息:
2.0.0-p451 :001 > PhoneNumber.new
NameError: uninitialized constant PhoneNumber
from (irb):1
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:90:in `start'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:9:in `start'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:69:in `console'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:40:in `run_command!'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands.rb:17:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `require'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `block in exec_app_rails'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `loop'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `exec_app_rails'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/cli.rb:5:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `require'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `<top (required)>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `load'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `<main>'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'
from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/2.2.2.02.02.02.0.2.2.02.222222.2.02.02.0.2.2.022222222222222
控制台似乎并不知道该型号。在普通的红宝石中,你需要要求&#39;包含该类的文件,但我认为rails控制台将自动加载所有模型。这是怎么回事?
答案 0 :(得分:45)
有些事情要尝试:
重启rails控制台;如果您执行> reload!
(虽然我发现这是不可预测的),或者通过重新启动控制台,只有已经打开的rails控制台才能获取模型的更改。
您的模型文件名为&#34; phone_number.rb&#34;它是在&#34; / app / models&#34;?
你应该仔细检查&#34; - 沙箱&#34; rails console命令上的选项。 AFAIK,这可以防止变化。不用开关就试试。
答案 1 :(得分:23)
我收到了错误:
NameError: uninitialized constant
然后我注意到我不小心创建了一个复数模型,所以我回去并将模型文件重命名为单数,并将模型文件中的类名更改为单数并解决了它。
答案 2 :(得分:5)
我也直接在models
目录中遇到了一个文件,结果发现我在启动时没有正确加载代码。我能够通过在development.rb文件中设置config.eager_load = true
来解决问题。这使我可以在控制台中使用该课程
答案 3 :(得分:4)
从Rails 5.1升级到5.2后,我开始遇到此问题 它解决了:
spring stop
spring binstub --all
spring start
rails s
答案 4 :(得分:1)
如果上述工作都没有,我也有不同的方法,因为它发生在真实场景中。
更具体地说,使用来自Thrift的自动生成的Ruby文件。
在我的情况下,我有一个Module
有几个班级,因此在这种情况下的顺序非常重要:
Class A
在同一模块中使用Class B
。但是,Class B
在 Class A
之后被声明为。
只需在 Class B
之前将Class A
声明为,就可以解决问题。
答案 5 :(得分:1)
与@ Michael-Neal相似。
我将控制器命名为单数。应用程序/控制器/的 product_controller.rb 强>
当我将其重命名为复数时,错误已解决。应用程序/控制器/的 products_controller.rb 强>
答案 6 :(得分:0)
我有同样的错误。在我仓促的脚手架中,我遗漏了model.rb文件。
答案 7 :(得分:0)
我遇到了类似的错误,但这是因为我创建了has_one
关系并随后删除了它had_one
的模型。我忘了从剩下的模型中删除has_one
关系。
答案 8 :(得分:0)
我遇到了这个问题,因为我在模型中更改了类的名称,但它与文件名不匹配。
“模型类名称使用CamelCase。它们是单数形式,并且将自动映射到复数数据库表名称。
模型文件进入app / models /#{singular_model_name} .rb。”
https://gist.github.com/iangreenleaf/b206d09c587e8fc6399e#model
答案 9 :(得分:0)
就我而言,我为列名命名为type
,并尝试将其值设置为UNPREPARED
。我收到这样的错误消息:
原因: api_1 | NameError:未初始化的常量UNPREPARED
在导轨中,列type
被保留:
ActiveRecord :: SubclassNotFound:单表继承机制无法找到子类“ UNPREPARED”。出现此错误是因为在继承的情况下,列“类型”保留用于存储类。 l 如果您不希望将其用于存储继承类,则可以轻松地重命名该列,或者覆盖Food.inheritance_column以将另一列用于该信息
答案 10 :(得分:0)
我在 Ubuntu 20.04 中处理 Rails 6 应用程序时遇到了同样的问题。
当我使用命令启动 rails 控制台时
rails console
然后运行下面的命令来列出所有可用的角色
Role.all
我收到以下错误:
Traceback (most recent call last):
1: from (irb):2
NameError (uninitialized constant Role)
这是我修复它的方法:
问题是我的 Role
模型使用名为 Userbase
的模块命名。所以,而不是这样:
Role.all
应该是这样的:
Userbase::Role.all
就这些
我希望这会有所帮助
答案 11 :(得分:0)
通过确保文件名与具有正确约定的类名相同,我的问题也得到了解决,例如 class AdLikes
具有文件名 ad_likes.rb