0

在完成了四个 RoR 教程之后,我更加困惑,因为他们从来没有解释为什么事情会以某种方式编码,以及为什么没有为什么,我所学的只是如何——我认为这不是一个好的编码器。今天早上我决定构建一个允许用户输入信用卡信息的小应用程序——信用卡号、信用卡代码和文本框中的地址(这部分我还没有完成)。根据教程,他们倾向于从数据库端开始。到目前为止我的步骤:

步骤 1. 创建应用程序。

Step 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 它们会有所不同)。

4

1 回答 1

4

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

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

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

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

于 2013-02-03T14:32:59.400 回答