Rails Console: перезагрузите! не отражают изменения в файлах модели? В чем может быть возможная причина?

95

Раньше все работало нормально. Я немного поиграл в конфиг. Так что, возможно, я неосознанно изменил какую-то конфигурацию.

вот конфиг окружения / 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'

Вот конфигурационный раздел 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

когда я бегу перезагрузить! на рельсах консоли он возвращает истину

Мэдди Шик
источник

Ответы:

181

reload!перезагружает только последний код в среде консоли. Он не повторно инициализирует существующие объекты.

Это означает, что если вы уже создали какие-либо объекты, их атрибуты не будут обновлены, включая недавно введенные проверки. Однако, если вы создаете новый объект, его атрибуты (а также проверки) будут отражать перезагруженный код. подробнее здесь

Назар Хуссейн
источник
А как насчет пользовательской проверки? Я определил несколько методов и зарегистрировался в validate. Когда я меняю логику проверки, это не отражается на перезагрузке !.
Maddy.Shik
2
Это отразится, когда вы повторно инициализируете объект.
Назар Хуссейн,
19

Вы перезагружаете объект из базы данных?

Например:

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

'a' не будет отражать никаких изменений в вашей модели, пока вы не перезагрузите ее из базы данных.

ctide
источник
1
Примечание. Это верно даже при доступе к методу объекта. Например, если вы измените определение метода класса foo (), то в консоли a.foo не будет использовать новое определение, если вы сначала не перезагрузите файл.
jpw