0

4 つの 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 を実行して「テスト」します。たとえば、彼らが通常行うことは、新しい価値を創造しようとすることです。ただし、次の2つの方法のいずれかを使用してそうする場合:

c = Info.new
c = info.new

次のエラーが表示されます。

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

コードが間違っているか、別のステップが含まれている可能性がありますが、私はこれらのチュートリアルと同じパターンに従っています.その理由。

たとえば (間違っていたら訂正してください)、新しいアプリケーションを構築するとき、Rails Generated Model Info を最初に実行する必要がありますか? または、後で他のエラーが発生します。また、データベースを 2 番目に構築する必要があります (データベースを参照するすべてのアプリケーションは、データベースを参照するためにデータベースが必要になるため、そうなると思います) - ここでは、migrate フォルダーに構築したデータベースが正しくないと仮定しますが、それらの値を呼び出していない何か他のものはありますか?

最後に、検証に関連するエラーを受け取るために、この例で「空白」の値を作成しようとしました (明らかに、新しい値には必要な値がありません)。new を正しい値 (この場合は最小で存在) で初期化しようとしても、これらのエラーは発生しません (ただし、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)

DB でそれを確認する必要がありsaveますが、新しいインスタンスを作成すると検証がトリガーされます。save!コンソールで使用save!する方がおそらく良いアイデアなので、例外が表示されます。

「生」で実行するirbと、面倒でエラーが発生しやすい手動ですべてを含めない限り、Rails に関連するものは何も含まれません。

于 2013-02-03T14:32:59.400 に答える