Lorsque j’exécute la commande rake: db migrate, j’obtiens une erreur «Constante constante non initialisée CreateArticles»

J’ai créé un modèle de script ruby ​​/ Générer un modèle d’article (simple enuff)

Voici le fichier de migration create_articles.rb:

def self.up create_table :articles do |t| t.column :user_id, :integer t.column :title, :ssortingng 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 

Lorsque je lance la commande rake: db migrate, je reçois un rake d’erreur interrompu! “CreateArticles constant non initialisé.”

Est-ce que quelqu’un sait pourquoi cette erreur continue à se produire?

Assurez-vous que le nom de votre fichier et le nom de la classe disent la même chose (sauf que le nom de la classe est camel). Le contenu de votre fichier de migration doit ressembler à ceci, simplifiez-le un peu:

 #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 

Si vous obtenez cette erreur et que ce n’est PAS à cause du nom du fichier de migration, il existe une autre solution possible. Ouvrez la classe directement dans la migration comme ceci:

 class SomeClass < ActiveRecord::Base; end 

Il devrait maintenant être possible d'utiliser SomeClass dans la migration.

Il est possible d’obtenir l’erreur donnée si vos noms de classe ne correspondent pas aux inflexions (comme les acronymes) de config/initializers/inflections.rb .

Par exemple, si vos inflexions incluent:

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

alors vous devrez peut-être vous assurer que la classe de votre migration est:

class CreateDOGHouses < ActiveRecord::Migration[5.0]

plutôt que:

class CreateDogHouses < ActiveRecord::Migration[5.0]

Ce n'est pas très courant, mais si vous générez une migration, un modèle ou quelque chose, puis ajoutez-en une partie aux inflexions, cela peut arriver. (L'exemple ici provoquera NameError: uninitialized constant CreateDOGHouses si le nom de votre classe est CreateDogHouses , au moins avec Rails 5.)