Когда я запускаю команду rake: db migrate, я получаю ошибку «Неинициализированная константа CreateArticles» - PullRequest
46 голосов
/ 05 января 2009

Я создал модель ruby ​​скрипт / сгенерировать модель 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! "Неинициализированная константа CreateArticles."

Кто-нибудь знает, почему эта ошибка продолжает происходить?

Ответы [ 3 ]

97 голосов
/ 05 января 2009

Убедитесь, что имя вашего файла и имя класса говорят одно и то же (за исключением того, что имя класса занято верблюдом). Содержимое вашего файла миграции должно выглядеть примерно так, также немного упростив их:

#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
3 голосов
/ 10 января 2017

Если вы получаете эту ошибку, и это НЕ из-за имени файла миграции, есть другое возможное решение. Откройте класс непосредственно в миграции следующим образом:

class SomeClass < ActiveRecord::Base; end

Теперь должно быть возможно использовать SomeClass в рамках миграции.

1 голос
/ 06 мая 2017

Возможно получить данную ошибку, если имена ваших классов не совпадают с перегибами (например, аббревиатурами) от 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.)

...