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: 迁移 =================== ================================
-- create_table(:states)
-> 0.0010s
rake 中止!
发生错误,此迁移和所有后续迁移均已取消:

未初始化的常量 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 个迁移(一个用于创建表,一个用于添加数据),但这也不起作用。有任何想法吗?

4

2 回答 2

0

尝试做:

State.reset_column_information

在您的 State.create 之前。

文件

于 2011-05-08T21:46:47.363 回答
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 回答