Принудительная перезагрузка объекта класса Ruby

Я пытаюсь воспроизвести ошибку, которая возникает, когда я получаю запись от ActiveRecord, но класс (класс activeRecord, а не экземпляр) не находится в памяти, затем модель класса activeRecord перезагружается. Я не уловил ошибку, так как кажется, что объект класса остается в памяти в течение достаточно долгого времени.

Вот тест:

def test_decryption_should_work_at_any_time
    require 'pry'
    binding.pry 
    account = Account.last 
    require 'pry'
    binding.pry
end

Посмотрите, и вы увидите, что аккаунт - это один и тот же объект, независимо от того, что я пытаюсь:

   102:     f = Account.create!(:key => "secret", :password => "password")
 =>103:     binding.pry 
   104:     account = Account.last 
   105:     binding.pry
   106:   end
   107: end
[1] pry(#<ActiveRecordTest>)> f.class.object_id
=> 70278442281960

Затем перезагрузите объект

  104:     account = Account.last 
 =>105:     binding.pry
   106:   end
   107: end
[1] pry(#<ActiveRecordTest>)> account.class.object_id
=> 70278442281960

К сожалению, объект класса получает тот же объект для класса учетной записи, чем когда он был создан. Есть ли способ заставить этот класс быть перезагружен?

Я знаю, где ошибка, я просто пытаюсь ее воспроизвести. Так есть ли способ выгрузить этот класс?

1 ответ

Классы не будут перезагружены в производственном коде Rails. Это особенность режима разработки Rails, и даже тогда классы перезагружаются только тогда, когда это необходимо, а не при каждой проверке.

Ваш Account модель использования STI (наследование одной таблицы)? У меня возникли проблемы, о которых вы упоминали (классы загружались во время выполнения в подобных случаях.

Другие вопросы по тегам