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__)}/**/"
Другие вопросы по тегам