Автозагрузка Rails 3
У меня есть class ConstData:
class ConstData US_CITIES = ['miami', 'new york'] EUROPERN_CITIES = ['madrid', 'london'] end
Его хранится в /lib/const_data.rb
Идея заключается в том, что внутри модели, controllerа или представления я могу сделать:
- Добавить пользовательское поле / столбец для разработки с помощью Rails 4
- Rails 2: Model.find (1) дает ошибку ActiveRecord, когда id 1 не существует
- Рельсы: не удалось найти рейды
- Не удается найти заголовок libpq-fe.h при попытке установить pg gem
- Лучший инструмент Ruby on Rails WebSocket
ConstData::US_CITIES
для получения US_CITIES и т. Д.
Rails должен автоматически загрузить этот class, я получил это от: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl=ru
Однако это не сработает. Может ли кто-нибудь объяснить мне, как это сделать?
- Rails - Nested включает в Active Records?
- Приложение Ruby on rails 4 не работает в iframe
- Помощники пути генерируют пути с точками вместо косых черт
- Автозагрузка файлов lib в Rails 4
- Предупреждение о устаревании при использовании has_many: через: uniq in Rails 4
- rails 3 - link_to для уничтожения неработающих
- Rails .where vs .find
- Не разрабатывать секретный ключ
Сообщение @ daniel относится к версии с 2008 года. Rails изменилась с тех пор.
На самом деле, совсем недавно. Rails3 не загружает каталог lib / автоматически.
Вы можете легко его активировать. Откройте config/application.rb
И добавьте в config (в classе Application
) следующую команду:
config.autoload_paths += %W(#{config.root}/lib)
Затем ваш lib / dir будет загружен автоматически.
Причина autoload_paths не сработала для вас, и вы были вынуждены делать:
Dir["lib/**/*.rb"].each do |path| require_dependency path end
потому что вы забыли пространство имен вашего classа .
lib / awesome / stuffs.rb должен содержать class / модуль следующим образом:
class/module Awesome::Stuffs ....
но у вас было:
class/module Stuffs ....
Rails может выполнять автозагрузку classов и модhive, имя которых соответствует пути к файлу и имени файла.
🙂
config.autoload_paths
не работает для меня. Я решил это, поставив следующее в ApplicationController
:
Dir["lib/**/*.rb"].each do |path| require_dependency path end
Следуйте за решением для автоматической загрузки lib:
Удалите config.threadsafe!
от development.rb и production.rb ;
Добавить в config/application.rb
:
config.autoload_paths += %W(#{config.root}/lib) config.threadsafe! config.dependency_loading = true