【问题标题】:Why am I getting an error during a migration coupled with default data?为什么在迁移过程中出现错误以及默认数据?
【发布时间】:2011-05-08 19:33:58
【问题描述】:
    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
耙子中止了!
发生错误,此迁移和所有后续迁移均已取消:

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

【问题讨论】:

  • 可能没有模型状态。此外,建议将数据库填充代码放入 db/seeds.rb 文件中。
  • 谢谢芋头。模型命名不一致

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


【解决方案1】:

尝试做:

State.reset_column_information

在您的 State.create 之前。

documentation

【讨论】:

    【解决方案2】:

    您的代码可以完美运行,只是您实际上没有State 类。 Rails 知道此类的唯一方法是,如果您在 app/models/state.rb 中将其定义为 Class State &lt; ActiveRecord::Base...

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

    rails g model State name:string abbreviation:string
    

    这将:

    1. 创建您的模型(和单元测试文件)
    2. 创建一个名为20110508223913_create_states.rb 的迁移,它看起来与上面尝试的迁移几乎相同。

    那么您需要做的就是添加您的State.create... 行,然后您就可以开始了。

    【讨论】:

      猜你喜欢
      • 2020-02-04
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2021-05-25
      • 2016-06-30
      • 2012-03-10
      • 2016-01-07
      • 2021-09-20
      相关资源
      最近更新 更多