0
    rails g migration CreateStates

次に、移行に次のコードを追加します。

===========================

class CreateStates < ActiveRecord::Migration
  def self.up
    create_table :states do |t|
      t.column :name, :string
      t.column :abbreviation, :string
    end

    State.create :name => 'Alabama', :abbreviation => 'AL'
    State.create :name => 'Alaska', :abbreviation => 'AK'
    State.create :name => 'Arizona', :abbreviation => 'AZ'
  end

  def self.down
    drop_table :states
  end
end

============================

エラーが発生します:

** db:migrate の呼び出し (first_time)
** 環境の呼び出し (first_time)
** 環境の実行
** db:migrateの実行
== CreateStates: migrating ================== ===============================
-- create_table(:states)
-> 0.0010s
レーキが中止されました!
エラーが発生しました。これ以降の移行はすべてキャンセルされました:

初期化されていない定数 CreateStates::State
/Users/jondoe/.rvm/rubies/ruby-1.8.7-p330/lib/ruby/gems/1.8/gems/rspec-core-2.5.1/lib/rspec/core/backward_compatibility. rb:20:in `const_missing'

========

これができるはずです:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

また、単なる移行ファイルではなく、モデルを作成しようとしました。それでも同じエラー。また、2 つの移行 (1 つはテーブルを作成し、もう 1 つはデータを追加する) を作成しようとしましたが、どちらも機能しませんでした。何か案は?

4

2 に答える 2

0

State実際にクラスがないことを除いて、コードは完全に機能します。Rails がこのクラスについて知る唯一の方法は、次のように定義した場合ですapp/models/state.rbClass State < ActiveRecord::Base...

カスタム移行を実行するのではなく、次のコード行を実行することをお勧めします。

rails g model State name:string abbreviation:string

この意志:

  1. モデル (および単体テスト ファイル) を作成します。
  2. のような名前の移行を作成します20110508223913_create_states.rb。これは、上記で試みた移行とほぼ同じに見えます。

State.create...次に、行を追加するだけで、準備完了です。

于 2011-05-08T22:43:50.337 に答える