Rails Console: neu laden! Änderungen in Modelldateien nicht widerspiegeln? Was könnte ein möglicher Grund sein?

95

Früher hat es gut funktioniert. Ich habe ein bisschen Config gespielt. Vielleicht habe ich einige Konfigurationen unwissentlich geändert.

Hier ist die Konfiguration von 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'

Hier ist der Konfigurationsabschnitt von 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

wenn ich reload laufen lasse! Auf der Rails-Konsole wird true zurückgegeben

Maddy.Shik
quelle

Antworten:

181

reload!Lädt nur den neuesten Code in der Konsolenumgebung neu. Vorhandene Objekte werden nicht neu initialisiert.

Das heißt, wenn Sie bereits Objekte instanziiert haben, werden deren Attribute nicht aktualisiert - einschließlich neu eingeführter Validierungen. Wenn Sie jedoch ein neues Objekt erstellen, spiegeln seine Attribute (und auch Validierungen) den neu geladenen Code wider. mehr hier

Nazar Hussain
quelle
Was ist mit der benutzerdefinierten Validierung? Ich habe einige Methoden definiert und mich bei validate registriert. Wenn ich die Validierungslogik ändere, wird dies beim Neuladen nicht berücksichtigt!.
Maddy.Shik
2
Es wird angezeigt, wenn Sie das Objekt neu initialisieren.
Nazar Hussain
19

Laden Sie das Objekt aus der Datenbank neu?

Beispielsweise:

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

'a' spiegelt keine Änderungen an Ihrem Modell wider, bis Sie es aus der Datenbank neu laden.

ctide
quelle
1
Hinweis - Dies gilt auch für den Zugriff auf eine Methode für ein Objekt. Wenn Sie beispielsweise die Definition der Klassenmethode foo () ändern, verwendet a.foo in der Konsole die neue Definition nur, wenn Sie zuerst a neu laden.
jpw