Когда я запускаю команду rake: db migrate, я получаю сообщение об ошибке "Uninitialized constant CreateArticles"
Я создал модель ruby script/generate model Article (простой 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! Msgstr "Неинициализированная константа CreateArticles."
Кто-нибудь знает, почему эта ошибка продолжается?
Ответы
Ответ 1
Убедитесь, что имя вашего файла и имя класса говорят одно и то же (кроме имени класса - с верблюдом). Содержимое вашего файла миграции должно выглядеть примерно так: упростить их:
#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
в рамках миграции.
Ответ 3
Возможно получить заданную ошибку, если ваши имена классов не соответствуют перегибам (например, аббревиатурам) из 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.)