1

Что я в основном делаю, это обмен некоторыми моделями по нескольким проектам. У меня есть базовый проект, в котором определены все модели и некоторые другие проекты, которые требуют тысяч моделей, поскольку все они используют одни и те же данные.Ruby on Rails: автозагрузка моделей из внешней папки не работает на Rails 3.1, 3.2

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

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

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

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

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

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

ответ

1

Вы можете попытаться загрузить модели с 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' 

Где ххх может быть путь к хранилищу Github, репозиторий Bitbucket, каталог vendor, или иным образом. (Although you should be aware of Rails 4 plans for vendor.)