Ruby on rails Rails:NameError:未初始化常量
我有一个叫做PhoneNumber的简单模型:Ruby on rails Rails:NameError:未初始化常量,ruby-on-rails,ruby-on-rails-4,rails-console,Ruby On Rails,Ruby On Rails 4,Rails Console,我有一个叫做PhoneNumber的简单模型: class PhoneNumber < ActiveRecord::Base validates :pnumber, presence: true, on: :create #=> { :message => " cannot be blank" } validates :pnumber, numericality: true, on: :create end 当我尝试创建一个空电话号码时(我想得到一条错误消息,因为验证
class PhoneNumber < ActiveRecord::Base
validates :pnumber, presence: true, on: :create #=> { :message => " cannot be blank" }
validates :pnumber, numericality: true, on: :create
end
当我尝试创建一个空电话号码时(我想得到一条错误消息,因为验证将失败),我得到了以下错误消息:
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
2.0.0-p451:001>PhoneNumber.new
NameError:未初始化的常量PhoneNumber
来自(irb):1
来自/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'
来自/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'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands\u tasks.rb:69:in'console'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands\u tasks.rb:40:in'run\u command!'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands.rb:17:in`'
来自/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'
来自/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'
来自/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'
来自/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'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/cli.rb:5:in`'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in'require'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in`'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/料仓/轨道:23:在“装载”中
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/箱子/轨道:23:in`'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby可执行文件挂钩:15:in'eval'
来自/Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/2.2.2.02.02.02.0.2.2.02.2222.2.02.02.0.2.2.022222
控制台似乎不知道该模型。在纯ruby中,您需要“require”包含类的文件,但我认为rails控制台将自动加载所有模型。这里发生了什么事?有些事情需要尝试:
我得到了一个错误:
NameError:未初始化的常量
然后我注意到我无意中创建了一个复数模型,所以我回去将模型文件重命名为单数,并将模型文件中的类名更改为单数,从而解决了这个问题 我也犯了同样的错误。事实证明,在我仓促搭建的过程中,我遗漏了model.rb文件。如果上述任何一项都不起作用,我也有一种不同的方法,就像在真实场景中发生的那样 更具体地说,使用自动生成的Ruby文件
在我的情况下,我有一个包含多个类的
模块,因此在这种情况下,的顺序很重要:
Class A
在同一模块中使用Class B
。然而,B类
在A类
之后被宣布为
在A类之前简单地声明B类就解决了我的问题。我在models
目录中直接遇到了一个文件,结果发现启动时没有正确加载代码。我可以通过在development.rb文件中设置config.eager\u load=true来解决这个问题。这使得我可以在控制台上使用与@Michael Neal类似的类
我把控制器命名为单数。app/controllers/产品控制器.rb
当我把它改名为复数时,错误就解决了。app/controllers/products\u controller.rb我有一个类似的错误,但这是因为我创建了一个has\u one
关系,然后删除了它拥有的模型。我只是忘了从剩余型号中删除has_one
关系。从Rails 5.1升级到5.2后,我开始出现此问题
我通过以下方式解决了问题:
spring stop
spring binstub --all
spring start
rails s
我遇到这个问题是因为我在模型中更改了类的名称,但它与文件名不匹配
“模型类名使用CamelCase。这些名称是单数,将自动映射到复数数据库表名。”
模型文件位于app/models/#{singular_Model_name}.rb中。”
在我的例子中,我将一个列名命名为类型
,并尝试将其值设置为未准备
。我收到了一条如下的错误信息:
原因:
api_1 | NameError:未初始化的常量未准备好
在rails中,保留列类型
:
ActiveRecord::SubclassNotFound:单表继承机制无法定位子类:“UNPREPARED”。引发此错误是因为列“type”是为在继承情况下存储类而保留的。Pl
如果不打算将此列用于存储继承类或覆盖Food.heritation\u列,请重命名此列以使用其他列获取该信息
我有
spring stop
spring binstub --all
spring start
rails s
rails console
Role.all
Traceback (most recent call last):
1: from (irb):2
NameError (uninitialized constant Role)
Role.all
Userbase::Role.all