Gem модели и некэшированные классы
У меня есть драгоценный камень с некоторыми распространенными моделями, которые я пытаюсь интегрировать в два приложения rails. (Обратите внимание, одно из этих приложений - Rails 2.3)
На данный момент все работает, но я получаю
can't dup NilClass
По второму запросу, который использует данную модель.
настройка config.cache_classes = true
разрешит это, но явно не оптимально для режима разработки.
Погуглив, я нашел несколько ссылок на unloadable
директива, поэтому я попытался добавить это к моим моделям драгоценных камней:
class User < ActiveRecord::Base
unloadable
#stuff
end
Это привело к тому, что Rails взорвался, сказав, что не может найти константу.
Мне действительно просто нужен способ сообщить приложению rails о перезагрузке классов гемов в режиме разработки, а не выбрасывать их, как сейчас.
1 ответ
Хорошо, проблема закончилась путями автозагрузки.
Поскольку у моделей есть зависимости, которые трудно удовлетворить, требуя их по одному, у меня был файл models.rb, который выглядел следующим образом:
autoload :User, 'my_gem/models/user'
autoload :Role, 'my_gem_models/role'
Это означало, что он был автоматически загружен вручную и не является частью парадигмы Rails autoload_path. Простое добавление ActiveSupport::Dependencies и добавление каталога моделей в пути автозагрузки сработало.
ActiveSupport::Dependencies.autoload_paths += Dir.glob "#{File.expand_path("../my_gem/models/", __FILE__)}/**/"