Consola Rails: ¡recarga! no refleja los cambios en los archivos del modelo? ¿Cuál podría ser la posible razón?

95

Anteriormente estaba funcionando bien. He estado jugando config. Así que puede ser que haya cambiado algunas configuraciones sin saberlo.

aquí está la configuración de environment / development.rb

  config.cache_classes = false

  # Log error messages when you accidentally call methods on nil.
  config.whiny_nils = true

  # Show full error reports and disable caching
  config.consider_all_requests_local       = true
  config.action_view.debug_rjs             = true
  config.action_controller.perform_caching = false

  # Don't care if the mailer can't send
  config.action_mailer.raise_delivery_errors = false

  # Print deprecation notices to the Rails logger
  config.active_support.deprecation = :log

  # Only use best-standards-support built into browsers
  config.action_dispatch.best_standards_support = :builtin

  # migration prefix with sequence #s
  config.active_record.timestamped_migrations = false

  #time zone
  config.time_zone = 'UTC'

Aquí está la sección de configuración de application.rb

 # Configure the default encoding used in templates for Ruby 1.9.
 config.encoding = "utf-8"

 # Configure sensitive parameters which will be filtered from the log file.
 config.filter_parameters += [:password]

 config.active_record.schema_format = :sql

cuando corro recargar! en la consola de rieles vuelve verdadero

Maddy.Shik
fuente

Respuestas:

181

reload!solo recarga el código más reciente en el entorno de la consola. No reinicializa los objetos existentes.

Esto significa que si ya ha creado una instancia de algún objeto, sus atributos no se actualizarán, incluidas las validaciones recién introducidas. Sin embargo, si crea un nuevo objeto, sus atributos (y también validaciones) reflejarán el código recargado. más aquí

Nazar Hussain
fuente
¿Qué pasa con la validación personalizada? He definido algunos métodos y me he registrado con validate. Cuando cambio la lógica de validación, no se refleja en la recarga.
Maddy.Shik
2
Se reflejará cuando reinicie el objeto.
Nazar Hussain
19

¿Está recargando el objeto de la base de datos?

Por ejemplo:

>> a = User.last
=> #<User id: 16, email: "[email protected]">
>> reload!
Reloading...
=> true

'a' no reflejará ningún cambio en su modelo hasta que lo vuelva a cargar desde la base de datos.

marea
fuente
1
Nota: esto es cierto incluso cuando se accede a un método en un objeto. Por ejemplo, si cambia la definición del método de clase foo (), entonces en la consola a.foo no usará la nueva definición a menos que primero vuelva a cargar a.
jpw