Принудительная перезагрузка объекта класса Ruby - PullRequest
1 голос
/ 08 января 2012

Я пытаюсь воспроизвести ошибку, которая возникает, когда я получаю запись из 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 Ответ

2 голосов
/ 08 января 2012

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

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

...