У меня есть две модели User
и Manager
. Я использую STI для наследования Manager
от User
модели.
приложение / модели / user.rb
class User < ActiveRecord::Base
end
custom_lib / модели / manager.rb
class Manager < User
end
Я добавил пользовательские модели для загрузки пути следующим образом:
конфиг / environment.rb
config.autoload_path += File.join(RAILS_ROOT, "custom_lib", "models")
В режиме разработки все работает как положено. В производственном режиме я получаю следующую ошибку:
The single-table inheritance mechanism failed to locate the subclass: Manager
По какой-то причине rails не загружает унаследованные классы.
Чтобы обойти эту проблему, мне явно требуются классы в инициализаторе.
конфиг / Инициализаторы / custom_models.rb
Dir[File.join(RAILS_ROOT, "custom_lib", "models", "*.rb")].each do |file_name|
require(File.join(File.dirname(file_name), File.basename(file_name, ".rb")))
end
Я предпочитаю использовать autoload_path
. Мне интересно, видел ли кто-нибудь еще такое поведение.
Я на Ruby 1.8.7, Rails 2.3.9, Ubuntu
Редактировать 1
Я знаю, что все работает, если все модели находятся в каталоге app/models
. В моем приложении сгенерированные модели находятся в произвольном месте, отсюда и это требование.