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

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


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: "asdfadsf@sdfdsf.com">
>> 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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.