Принудительная перезагрузка объекта класса 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 (наследование одной таблицы)? У меня возникли проблемы, о которых вы упоминали (классы загружались во время выполнения в подобных случаях.