为什么我在迁移期间加上默认数据时出错?

时间:2011-05-08 19:33:58

标签: ruby-on-rails-3 rails-migrations

    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:迁移============================================= ======
- create_table(:states)
    - &GT; 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个迁移(一个用于创建表,然后一个用于添加数据),但也无法正常工作。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

尝试做:

State.reset_column_information
在你的State.create之前

documentation

答案 1 :(得分:0)

您的代码将完美运行,除非您实际上没有State类。 Rails了解此类的唯一方法是,如果您在app/models/state.rb中将其定义为Class State < ActiveRecord::Base...

我建议不要运行自定义迁移,而是运行以下代码:

rails g model State name:string abbreviation:string

这将:

  1. 创建模型(和单元测试文件)
  2. 创建一个名为20110508223913_create_states.rb的迁移,它看起来与上面尝试的迁移几乎完全相同。
  3. 然后您需要做的就是添加State.create...行,您应该好好去。