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
====
============================我收到一个错误:
** 调用数据库:迁移 (first_time)
** 调用环境 (first_time)
** 执行环境
** 执行数据库:迁移
== 创建状态:迁移 ===
==========================================================-- create_table(:状态)
-> 0.0010s
耙子中止了!
发生错误,此迁移和所有后续迁移均已取消:
未初始化的常量 创建状态::状态
/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 个迁移(一个用于创建表,然后一个用于添加数据),但也没有奏效。有什么想法吗?
尝试执行以下操作:
State.reset_column_information
在您的状态创建之前。
文档
你的代码可以完美地工作,除了你实际上没有State
类。Rails 了解这个类的唯一方法是你在 app/models/state.rb
中将其定义为 Class State < ActiveRecord::Base...
与其运行自定义迁移,我建议运行以下代码行:
rails g model State name:string abbreviation:string
这将:
- 创建模型(和单元测试文件)
- 创建一个名为
20110508223913_create_states.rb
的迁移,它看起来与您上面尝试的迁移几乎相同。
然后,您需要做的就是添加State.create...
行,您应该很高兴。