2009-01-05 12 views
43

creé un script ruby ​​modelo/generar el modelo artículo (simple enuff)Cuando ejecuto el rastrillo: DB migrar comando consigo un error "CreateArticles constantes sin inicializar"

Aquí está el archivo de migración 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 

Cuando ejecuto el comando rake: db migrate ¡recibo un error de rake abortado! "Constante sin inicializar CreateArticles".

¿Alguien sabe por qué sigue ocurriendo este error?

+0

¿Cuál es el nombre de su archivo de migración y cómo se ve su declaración de clase? – thetacom

+0

20090106022023_create_articles.rb (archivo de migración) ^ No sería igual que el anterior (declaración de clase) – featureBlend

+0

Su declaración de clase debe incluir todo lo anterior y se ve algo así como: clase CreateMyModel thetacom

Respuesta

91

Asegúrese de que el nombre de archivo y nombre de la clase dicen lo mismo (excepto el nombre de la clase está entubado camello) .Los contenidos de su archivo de migración debe ser algo como esto, ellos simplificado un poco demasiado:

#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

Gracias thetacom !!!! Tu da hombre amigo ¿Qué tan estúpido puedo ser? – featureBlend

+5

Todos tenemos nuestros momentos. – thetacom

+0

Demasiados 'fin's, pero también lo hizo la pasta original – Gareth

2

Si obtiene este error y NO es debido al nombre del archivo de migración, existe otra posible solución. Abra la clase directamente en la migración de esta manera:

class SomeClass < ActiveRecord::Base; end 

Ahora debería ser posible utilizar SomeClass dentro de la migración.

0

Es posible obtener el error dado si sus nombres de clase no coinciden con inflexiones (como acrónimos) de config/initializers/inflections.rb.

Por ejemplo, si sus inflexiones son:

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

entonces es posible que tenga que asegurarse de que la clase en su migración es:

class CreateDOGHouses < ActiveRecord::Migration[5.0]

en lugar de:

class CreateDogHouses < ActiveRecord::Migration[5.0]

No es muy común, pero si genera una migración o un modelo o algo así, y luego agrega una parte a inflexiones posteriores, puede suceder. (El ejemplo aquí causará NameError: uninitialized constant CreateDOGHouses si su nombre de clase es CreateDogHouses, al menos con Rails 5.)

Cuestiones relacionadas