55

我创建了一个模型 ruby​​ 脚本/生成模型文章(简单的 enuff)

这是迁移文件 create_articles.rb:

def self.up
  create_table :articles do |t|
    t.column :user_id, :integer
    t.column :title, :string
    t.column :synopsis, :text, :limit => 1000
    t.column :body, :text, :limit => 20000
    t.column :published, :boolean, :default => false
    t.column :created_at, :datetime
    t.column :updated_at, :datetime
    t.column :published_at, :datetime
    t.column :category_id, :integer
  end

def self.down
  drop_table :articles
 end
end

当我运行 rake:db migrate 命令时,我收到一个错误 rake aborted!“未初始化的常量 CreateArticles。”

有谁知道为什么这个错误不断发生?

4

4 回答 4

118

确保你的文件名和类名是一样的(除了类名是驼峰式的)。你的迁移文件的内容应该是这样的,也简化了一点:

#20090106022023_create_articles.rb
class CreateArticles < ActiveRecord::Migration   
  def self.up
    create_table :articles do |t|
      t.belongs_to :user, :category
      t.string :title
      t.text :synopsis, :limit => 1000
      t.text :body, :limit => 20000
      t.boolean :published, :default => false
      t.datetime :published_at
      t.timestamps
    end
  end

  def self.down
    drop_table :articles
  end
end
于 2009-01-05T14:33:44.640 回答
9

如果您的类名与config/initializers/inflections.rb.

例如,如果您的变形包括:

ActiveSupport::Inflector.inflections(:en) do |inflect|
  inflect.acronym 'DOG'
end

那么您可能需要确保迁移中的类是:

class CreateDOGHouses < ActiveRecord::Migration[5.0]

而不是:

class CreateDogHouses < ActiveRecord::Migration[5.0]

不是很常见,但是如果您生成迁移或模型或其他东西,然后将其中的一部分添加到变形中,则可能会发生。(这里的示例将导致NameError: uninitialized constant CreateDOGHouses如果您的类名是CreateDogHouses,至少在 Rails 5 中是这样。)

于 2017-05-05T22:58:33.880 回答
3

如果您收到此错误并且不是因为迁移文件名,那么还有另一种可能的解决方案。像这样在迁移中直接打开类:

class SomeClass < ActiveRecord::Base; end

现在应该可以SomeClass在迁移中使用。

于 2017-01-10T19:55:33.073 回答
2

最佳答案为我解决了。把它留在这里以防万一。

例子

如果您的迁移文件被调用

20210213040840_add_first_initial_only_to_users.rb

那么迁移文件中的类名应该是

AddFirstInitialOnlyToUsers

注意:如果类名不匹配,即使差异只是小写t而不是“To”中的大写“T”也会出错 - 所以要小心!

于 2021-02-13T11:17:31.713 回答