Ruby on Rails: автозагрузка моделей из внешней папки завершается неудачно в Rails 3.1, 3.2 - PullRequest
1 голос
/ 12 февраля 2012

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

После этого я определил config.autoload_paths, указывающий на папку модели других проектов:

config.autoload_paths += %W(#{config.root}/../base_project/app/models)

С Rails 3.0 он работает отлично, однако с Rails 3.1, 3.2 я получаю неинициализированный констант для каждого имени модели, например:

NameError (uninitialized constant ApplicationController::User):
  app/controllers/application_controller.rb:11:in `current_user'

Как я могу это исправить, не дублируя файлы и не связывая их символически?

К вашему сведению, я заполнил ошибку здесь: https://github.com/rails/rails/issues/5007

1 Ответ

1 голос
/ 08 августа 2012

Вы можете попробовать загрузить модели с require_dependency.Возможно, при загрузке приложения вы можете сделать следующее.(require_dependency является частью Rails и отличается от require.)

Dir.glob(File.join(config.root, "**", "*.rb")) { |filename| require_dependency filename }

Это, однако, не может быть идеальным.

Другое более распространенное (и, возможно, лучшее) решение будетупаковать ваши модели и сделать их доступными как гем.

# Gemfile of some project
gem 'shared_models_by_gabriel', :path => 'xxx'

Где xxx может быть путем к хранилищу Github, хранилищу Bitbucket, каталогу vendor или иным образом,( Хотя вы должны знать о планах Rails 4 для поставщика. )

...