RoR - NameError:未初始化的常量Info / NameError:未定义的局部变量或方法'info'for main:Object

时间:2013-02-03 14:24:16

标签: ruby-on-rails ruby

在做了四个RoR教程之后,我更加困惑,因为他们从来没有解释为什么事物以某种方式被编码而且没有原因的顺序,所有我正在学习的是 - 我是不要认为是一个好的程序员。今天早上我决定建立一个小应用程序,允许用户输入信用卡信息 - 信用卡号,信用卡代码和文本框中的地址(这部分我还没有到达)。根据教程,他们倾向于从数据库结束开始。到目前为止我的步骤:

步骤1.创建应用程序。

步骤2.执行“rails generate model info”

步骤3.在db \ migrate文件夹中,这创建了一个格式为timestamp_create_infos的文件。我在文件中输入了如下代码:

class CreateInfos < ActiveRecord::Migration
  def change
    create_table :infos do |t|
      t.integer :ccnumber
      t.integer :cccode
      t.text :address
      t.timestamps
    end
  end
end

根据各篇文章,这应该构建一个表格,其中包含我在上面列出的值以及它们在sqllite中的各种类型。我认为在类比中,所以我认为在SQLServer中创建一个数据库(如果这个假设是错误的,请纠正我):

CREATE TABLE info (
  ccnumber BIGINT,
  cccode INT,
  address VARCHAR(50)
)

步骤4:在app \ models文件夹中,我编辑了“info.rb”文件,如下所示:

class Info < ActiveRecord::Base
  validates :ccnumber, :presence => true, :length => {minimum:16}
  validates :cccode, :presence => true, :length => {minimum:3}
  validates :address, :presence => true
end

此时,大多数教程(通常构建博客或Twitter克隆)将通过执行IRB来“测试”事物。例如,他们通常会尝试创建一个新值。但是,当我使用以下两种方法之一时:

c = Info.new
c = info.new

我收到此错误:

NameError: uninitialized constant Info / NameError: undefined local variable or method 'info' for main:Object

也许代码是错误的,或者涉及到另一个步骤,但我遵循相同的模式来处理这些教程 - 我为什么在完成其中几个教程之后,我尝试自己构建一些新东西,如同他们的方法论缺乏原因。

例如(如果我错了,请纠正我),在构建新应用程序时,是否应该首先运行rails生成模型信息?或者,稍后会创建其他错误。另外,如果数据库是第二个构建的(我会假设,因为任何引用数据库的应用程序都需要一个数据库才能引用它) - 我在这里假设我在migrate文件夹中构建的数据库不正确,但是还有什么不是那些价值观?

最后,我尝试在此示例中创建一个“空白”值以接收与验证相关的错误(显然新缺少值,它将需要)。即使我尝试用正确的值初始化一个新的(在这种情况下,最小和存在),它仍然是这些错误(尽管如果我尝试c = Info.new与c = info.new,它们会有所不同)。

1 个答案:

答案 0 :(得分:4)

您需要在rails console中进行测试,这会加载您的Rails环境,包括模型。要实例化模型,您需要使用类名Info

info = Info.new # Or supply arguments...
info = Info.new(address: "I am an address", cccode: 42)

您需要save / save!才能在数据库中看到它,但创建新实例会触发您的验证。在控制台中使用save!可能是一个更好的主意,所以你会看到任何异常。

在“原始”irb中运行将包含与Rails无关的任何内容,除非您手动包含所有内容,这将是乏味且容易出错的。