Console Rails: rechargez! ne reflète pas les changements dans les fichiers modèles? Quelle pourrait être la raison possible?

95

Auparavant, cela fonctionnait bien. J'ai joué un peu config. Alors peut-être ai-je changé une configuration sans le savoir.

voici la configuration 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'

Voici la section de configuration 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

quand je lance recharger! sur rails console il retourne vrai

Maddy.Shik
la source

Réponses:

181

reload!recharge uniquement le dernier code de l'environnement de la console. Il ne réinitialise pas les objets existants.

Cela signifie que si vous avez déjà instancié des objets, leurs attributs ne seront pas mis à jour, y compris les validations nouvellement introduites. Cependant, si vous créez un nouvel objet, ses attributs (ainsi que les validations) refléteront le code rechargé. plus ici

Nazar Hussain
la source
Qu'en est-il de la validation personnalisée? J'ai défini quelques méthodes et enregistré avec validate. Lorsque je change la logique de validation, cela ne se reflète pas sur le rechargement !.
Maddy.Shik
2
Cela se reflétera lorsque vous réinitialiserez l'objet.
Nazar Hussain
19

Rechargez-vous l'objet à partir de la base de données?

Par exemple:

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

'a' ne reflètera aucune modification de votre modèle tant que vous ne l'aurez pas rechargé depuis la base de données.

ctide
la source
1
Remarque - cela est vrai même lors de l'accès à une méthode sur un objet. Par exemple, si vous modifiez la définition de la méthode de classe foo (), alors dans la console a.foo n'utilisera pas la nouvelle définition à moins que vous ne rechargiez d'abord a.
jpw