Console Rails: ricarica! non riflette i cambiamenti nei file del modello? Quale potrebbe essere la ragione possibile?


95

In precedenza funzionava bene. Ho giocato un po 'a config. Quindi potrebbe essere che ho cambiato inconsapevolmente alcune configurazioni.

ecco la configurazione di 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'

Ecco la sezione di configurazione di 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

quando corro ricarica! sulla console rails restituisce true

Risposte:


181

reload!ricarica solo il codice più recente nell'ambiente della console. Non reinizializza gli oggetti esistenti.

Ciò significa che se hai già istanziato degli oggetti, i loro attributi non verranno aggiornati, comprese le convalide appena introdotte. Tuttavia, se crei un nuovo oggetto, i suoi attributi (e anche le convalide) rifletteranno il codice ricaricato. più qui


E la convalida personalizzata? Ho definito alcuni metodi e mi sono registrato con validate. Quando cambio la logica di convalida, non si riflette sulla ricarica !.
Maddy.Shik

2
Si rifletterà quando si reinizializza l'oggetto.
Nazar Hussain

19

Stai ricaricando l'oggetto dal database?

Per esempio:

>> a = User.last
=> #<User id: 16, email: "asdfadsf@sdfdsf.com">
>> reload!
Reloading...
=> true

'a' non rifletterà alcuna modifica al tuo modello finché non lo ricarichi dal db.


1
Nota: questo è vero anche quando si accede a un metodo su un oggetto. Ad esempio, se si modifica la definizione del metodo di classe foo (), nella console a.foo non utilizzerà la nuova definizione a meno che non si ricarichi prima a.
jpw
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.