2009-01-05 5 views
43

J'ai créé un script Ruby modèle/générer le modèle article (simple, Enuff)Quand je lance le râteau: db émigre commande je reçois une erreur « CreateArticles constante initialisées »

Voici le fichier de migration 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 

Lorsque j'exécute la commande rake: db migrate Je reçois une erreur rake annulée! "CréerArticles constant non initialisé."

Est-ce que quelqu'un sait pourquoi cette erreur persiste?

+0

Quel est le nom de votre fichier de migration et à quoi ressemble votre déclaration de classe? – thetacom

+0

20090106022023_create_articles.rb (fichier de migration) ^ Ne serait-ce pas le même que ci-dessus (déclaration de classe) – featureBlend

+0

Votre déclaration de classe doit contenir tout ce qui précède et ressemble à ceci: class CreateMyModel thetacom

Répondre

91

Assurez-vous que votre nom de fichier et le nom de classe disent la même chose (à l'exception du nom de la classe est chameau tubé) .Les contenu de votre fichier de migration devrait ressembler à quelque chose comme ça, les simplifié un peu trop:

#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 
+0

Merci Thetacom !!!! Vous da mec mec. Que je peux être stupide? – featureBlend

+5

Nous avons tous nos moments. – thetacom

+0

Trop de 'end's - mais la pâte d'origine aussi – Gareth

2

Si vous obtenez cette erreur et 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 au sein de la migration.

0

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 flexions comprennent:

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

alors vous pourriez avoir besoin pour vous assurer que la classe dans votre migration est:

class CreateDOGHouses < ActiveRecord::Migration[5.0]

plutôt que:

class CreateDogHouses < ActiveRecord::Migration[5.0]

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

Questions connexes