【问题标题】:Uninitialized constant #{MIGRATION_NAME}::#{TABLE_NAME} when running migration运行迁移时未初始化的常量#{MIGRATION_NAME}::#{TABLE_NAME}
【发布时间】:2014-12-29 23:45:59
【问题描述】:

我有一个 Rails 迁移,它在我的表中创建了一些条目。此表已在之前的迁移中创建。那么,表肯定是存在的。

但是,当我运行它时,我得到了这个错误:

uninitialized constant AddInitialStates::State

这是我的迁移示例:

class AddInitialStates < ActiveRecord::Migration
  def up
    State.create :short_name => 'AL', :long_name => 'Alabama'
    State.create :short_name => 'AK', :long_name => 'Alaska'

    # ... other create requests
  end
end

【问题讨论】:

    标签: ruby-on-rails ruby migration rake


    【解决方案1】:

    解决方案其实很简单。运行rake db:migrate 时,迁移工具需要模型存在。因此,在这里,我们得到一个uninitialized constant 错误。迁移工具正在搜索State 模型并将使用它来调用create 方法。

    然后,有几种方法可以解决此问题。最简单的是创建缺失的模型。

    否则,如果您不想创建它们,这里有一个简单的修复方法。如果您正在运行过渡迁移以结束正确的架构版本,您可能需要它。

    对于每个错误的迁移,在其中插入以下代码:

    class MyMigration < ActiveRecord::Migration
      def MyTable < ActiveRecord::Base; end
    
      def change
        # Your migration
      end
    end
    

    这些解决方案适用于 Rake 找不到模型/实体/表的所有类似解决方案。

    顺便说一句,您应该避免这些创建请求。请改用seeds.rb 文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 2014-08-13
      相关资源
      最近更新 更多