Я пытаюсь извлечь часть моего проекта Rails в свой каталог lib, но я не могу понять, как правильно связать мои файлы. Моя структура каталогов выглядит следующим образом:Организация файлов в каталоге lib
lib/
eventable/
calendar.rb
helpers.rb
# Rest of rails directories/files
Я требуя eventable каталог в config/application.rb
:
config.autoload_paths += %W(#{config.root}/lib #{config.root}/lib/eventable)
Мои помощники и календарь Р.Б. файлы:
# helpers.rb
module Eventable
module Helpers
def calendar_for...
Calendar.new...
end
end
end
# calendar.rb
module Eventable
class Calendar
# methods defined here
end
end
Я затем смешивание my Eventable :: Helpers в регулярных помощниках Rails, чтобы я мог использовать calendar_for
в моих представлениях:
ActionView::Base.send :include, Eventable::Helpers
Этот последний шаг, кажется, работает нормально. Тем не менее, когда я иду к виду, который с помощью этого помощника я получаю:
uninitialized constant Eventable::Helpers::Calendar
Если я изменить мой помощник, так что он пытается получить доступ к Eventable::Calendar.new
вместо этого я получаю:
uninitialized constant Eventable::Calendar
Когда я все это в одном файле, все работает отлично. Итак, как я могу правильно связать эти файлы?
Спасибо, что это сработало. Вы знаете, почему это необходимо? Это связано с тем, что автозагрузка не может загрузить их в правильном порядке?Или потому, что тот факт, что я использую класс Calendar из помощника вида, недостаточно, чтобы сказать Rails, что класс должен быть загружен автоматически (т. Е. К тому времени, когда он добирается там, уже слишком поздно?) –
Я не думаю, что это имеет какое-то отношение к приказу или помощникам. Проблема исходит от Ruby. Расположение модулей должно соответствовать структуре каталогов, как и вы, но когда они требуются непосредственно из подкаталога, это вызывает ошибку. Взгляните на это: [Лучшая практика для Ruby требует] (http://devblog.vworkapp.com/post/910714976/best-practice-for-rubys-require). –