Rails 3 автозагрузка - PullRequest
       26

Rails 3 автозагрузка

15 голосов
/ 02 ноября 2010

У меня есть класс ConstData:

class ConstData

  US_CITIES = ['miami', 'new york']

  EUROPERN_CITIES = ['madrid', 'london']

end

Он хранится в /lib/const_data.rb

Идея состоит в том, что внутри модели, контроллера или представления я могу сделать:

ConstData::US_CITIES для получения US_CITIES и т. Д.

Rails должен загружать этот класс автоматически, я получил это от: http://groups.google.com/group/rubyonrails-talk/browse_thread/thread/662abfd1df9b2612?hl=en

Однако это не работает.Может кто-нибудь объяснить мне, как это сделать?

Ответы [ 4 ]

48 голосов
/ 02 ноября 2010

Пост @daniel относится к 2008 году. Rails изменился с тех пор.
На самом деле, совсем недавно.Rails3 не загружает каталог lib / автоматически.

Вы можете активировать его довольно легко, хотя.Откройте config/application.rb и добавьте в конфигурации (в классе Application) следующее:

config.autoload_paths += %W(#{config.root}/lib)

Тогда ваш lib / dir будет автоматически загружен.

13 голосов
/ 03 августа 2012

Причина, по которой autoload_paths не работает для вас, и вы были вынуждены сделать:

Dir["lib/**/*.rb"].each do |path|
  require_dependency path
end

потому что вы забыли указать пространство имен вашего класса .

lib / awesome / stuffs.rb должен содержать класс / модуль, подобный этому:

class/module Awesome::Stuffs
....

но у вас было:

class/module Stuffs
....

Rails может только автоматически загружать классы и модули, чье имя совпадает с путем к файлу и именем файла. :)

2 голосов
/ 18 октября 2011

config.autoload_paths не работает для меня. Я решил это, вставив в ApplicationController следующее:

Dir["lib/**/*.rb"].each do |path|
  require_dependency path
end
1 голос
/ 16 мая 2013

Выполните загрузку lib dir:

Удалить config.threadsafe! из development.rb и production.rb ;

Добавить в config/application.rb:

config.autoload_paths += %W(#{config.root}/lib)
config.threadsafe!
config.dependency_loading = true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...