Консоль Rails: перезавантажте! не відображає змін у файлах моделей? Що може бути можливою причиною?


95

Раніше це працювало нормально. Я трохи грав у конфігурацію. Можливо, я несвідомо змінив деякі конфігурації.

ось конфігурація 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'

Ось розділ конфігурації 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

коли я запускаю перезавантаження! на консолі рейок це повертає true

Відповіді:


181

reload!лише перезавантажує останній код у консольному середовищі. Він не ініціалізує існуючі об'єкти.

Це означає, що якщо ви вже створили екземпляр будь-яких об’єктів, їх атрибути не оновлюватимуться - включаючи нещодавно введені перевірки. Однак, якщо ви створюєте новий об'єкт, його атрибути (а також перевірки) відображатимуть перезавантажений код. більше тут


А як щодо спеціальної перевірки? Я визначив деякі методи та зареєструвався з validate. Коли я змінюю логіку перевірки, це не відображається на перезавантаженні !.
Медді Шик,

2
Це відображатиметься, коли ви повторно ініціалізуєте об'єкт.
Назар Хуссейн,

19

Ви перезавантажуєте об’єкт із бази даних?

Наприклад:

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

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


1
Примітка - це вірно навіть при доступі до методу на об'єкті. Наприклад, якщо ви зміните визначення методу класу foo (), то в консолі a.foo не використовуватиме нове визначення, якщо ви спочатку не перезавантажите a.
jpw
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.