Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:NameError:未初始化常量_Ruby On Rails_Ruby On Rails 4_Rails Console - Fatal编程技术网

Ruby on rails Rails:NameError:未初始化常量

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 当我尝试创建一个空电话号码时(我想得到一条错误消息,因为验证

我有一个叫做PhoneNumber的简单模型:

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控制台将自动加载所有模型。这里发生了什么事?

有些事情需要尝试:

  • 重启rails控制台;如果您重新加载,对您的模型所做的更改只会被已经打开的rails控制台接收(尽管我发现这是不可预测的),或者重新启动控制台

  • 您的模型文件名为“phone_number.rb”,是否在“/app/models”中

  • 您应该在rails控制台命令上仔细检查“--sandbox”选项。好了,这可以防止改变。不用开关试试看


  • 我得到了一个错误:

    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