tutorial software rails ejemplos descargar caracteristicas aprender ruby-on-rails-4 rails-console

ruby on rails 4 - software - NameError: constante sin inicializar(rieles)



ruby on rails software (8)

Algunas cosas para probar:

  1. Reinicie la consola de rieles; los cambios en sus modelos solo serán recogidos por una consola de rieles que ya está abierta si lo hace > reload! (aunque he encontrado que esto es impredecible), o reiniciando la consola.

  2. ¿Su archivo de modelo se llama "phone_number.rb" y está en "/ app / models"?

  3. Debería verificar la opción "--sandbox" en el comando de la consola de Rails. AFAIK, esto evita los cambios. Pruébalo sin el interruptor.

Tengo un modelo simple llamado PhoneNumber:

class PhoneNumber < ActiveRecord::Base validates :pnumber, presence: true, on: :create #=> { :message => " cannot be blank" } validates :pnumber, numericality: true, on: :create end

Voy a la carpeta raíz de la aplicación (la que contiene la subcarpeta de la aplicación) e inicio la consola:

rails console --sandbox

Cuando intento crear un número de teléfono vacío (quiero obtener un mensaje de error ya que la validación fallará) Recibo el siguiente mensaje de error:

2.0.0-p451 :001 > PhoneNumber.new NameError: uninitialized constant PhoneNumber from (irb):1 from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:90:in `start'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/console.rb:9:in `start'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:69:in `console'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands/commands_tasks.rb:40:in `run_command!'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/commands.rb:17:in `<top (required)>'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `require'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:43:in `block in exec_app_rails'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `loop'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/app_rails_loader.rb:32:in `exec_app_rails'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/lib/rails/cli.rb:5:in `<top (required)>'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `require'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/gems/railties-4.1.5/bin/rails:9:in `<top (required)>'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `load'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/rails:23:in `<main>'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/ruby_executable_hooks:15:in `eval'' from /Users/nnikolo/.rvm/gems/ruby-2.0.0-p451@railstutorial_rails_4_0/bin/2.2.2.02.02.02.0.2.2.02.222222.2.02.02.0.2.2.022222222222222

Parece que la consola no es consciente del modelo. En ruby ​​normal, debe ''requerir'' el archivo que contiene la clase, pero pensé que la consola de los rieles cargaría automáticamente todos los modelos. ¿Que esta pasando aqui?


Comencé a tener este problema después de actualizar de Rails 5.1 a 5.2
Se resolvió con:

spring stop spring binstub --all spring start rails s


Estaba recibiendo el error:

NameError: uninitialized constant

Luego me di cuenta de que accidentalmente había creado un modelo plural, así que volví y cambié el nombre del archivo del modelo a singular y también cambié el nombre de la clase en el archivo del modelo a singular y eso lo resolvió.


Me encontré con esto también con un archivo directamente en el directorio de models , y resulta que no estaba cargando correctamente el código al inicio. Pude solucionar el problema configurando config.eager_load = true en mi archivo development.rb. Esto hizo que la clase estuviera disponible para mí en la consola.


Si ninguno de los anteriores funciona, también tengo un enfoque diferente, como me sucedió en un escenario real.

Más específicamente utilizando archivos de Ruby generados automáticamente desde Thrift .

En mi situación, tuve un Module con varias clases, por lo que el orden es importante en este caso:

Class A hace uso de la Class B en el mismo módulo. Sin embargo, la Class B se declaró después de la Class A

El simple hecho de declarar la Class B antes de la Class A solucionó el problema.


Similar con @ Michael-Neal.

Yo había llamado al controlador como singular. app / controllers / product_controller.rb

Cuando lo renombré como plural, se solucionó el error. app / controllers / products_controller.rb


Tuve un error similar, pero fue porque había creado una relación has_one y, posteriormente, has_one el modelo que had_one . Acabo de olvidar eliminar la relación has_one del modelo restante.


Yo tenía el mismo error. Resulta que en mis andamios apresurados dejé fuera el archivo model.rb.