2009-01-05 58 views
43

我创建了一个模型Ruby脚本/生成模型文章(简单句话之后B)当我运行rake:数据库迁移命令我得到一个错误“未初始化的常量CreateArticles”

下面是迁移文件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中止! “未初始化的常量CreateArticles”。

有谁知道为什么这个错误继续发生?

+0

你的迁移文件的名称是什么,你的类声明是什么样的? – thetacom 2009-01-05 14:14:59

+0

20090106022023_create_articles.rb(迁移文件) ^不会像上面那样(类声明) – featureBlend 2009-01-05 14:22:11

回答

91

确保您的文件名和类名说同样的事情(除了类名骆驼套管)迁移文件.The内容应该是这个样子,他们简化有点太:

#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 
2

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

class SomeClass < ActiveRecord::Base; end 

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

0

如果您的类名不匹配来自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)。

相关问题