我创建了一个模型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中止! “未初始化的常量CreateArticles。”
有谁知道为什么会出现这种错误?
答案 0 :(得分:97)
请确保您的文件名和类名称相同(除了类名称是驼峰)。迁移文件的内容应如下所示,简化它们:
#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
答案 1 :(得分:3)
如果由于迁移文件名而导致此错误并且不是,则还有另一种可能的解决方案。直接在迁移中打开类,如下所示:
class SomeClass < ActiveRecord::Base; end
现在应该可以在迁移中使用SomeClass
。
答案 2 :(得分:2)
最佳答案为我解决了。留在这里以防万一。
如果您的迁移文件被调用
20210213040840_add_first_initial_only_to_users.rb
那么迁移文件中的类名应该是
AddFirstInitialOnlyToUsers
注意:如果类名不匹配,即使区别只是小写的 t
而不是大写的 'To' 中的 'T',它也会出错 - 所以要小心!
答案 3 :(得分:1)
如果您的班级名称与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。)