У меня есть папка в моей папке lib
, которая содержит модуль и некоторые подмодули. Упрощенная это выглядит следующим образом:Расширение модулей в Rails
структура папок
lib/bottles
lib/bottles/bottles.rb
lib/bottles/caps.rb
bottles.rb
module Bottles
def hello_bottles
puts "Hello Bottles"
end
end
caps.rb
module Bottles
module Caps
def hello_caps
puts "Hello Caps"
end
end
end
Кроме того, в config/application.rb
У меня есть следующая строка:
config.autoload_paths += %W(#{config.root}/lib)
I включает модуль и его подмодули в моем классе, как так:
class MyClass
extend Bottles
extend Bottles::Caps
end
Проблема заключается в том, что вызов MyClass.hello_caps
работает просто отлично и печатает "Hello Caps"
, но называть MyClass.hello_bottles
дает мне неопределенную ошибку метода:
NoMethodError: undefined method 'hello_bottles' for MyClass
Каков правильный синтаксис и конфигурация для расширения модуля верхнего уровня Bottles
, поэтому я могу использовать его методы как методы класса?
Обновлено мой ответ, это работает для меня. – tpbowden
Это работает, спасибо. Чувствует себя немного уродливым, хотя не все сгруппировано. Вы знаете, как заставить его работать с 'bottles.rb' и' caps.rb' в той же папке? –
Мое единственное предложение - прекратить использование автозагрузчика и потребовать явно, где это необходимо. Поскольку lib уже находится на пути загрузки, вы можете просто «потребовать» бутылки/бутылки «' 'и' require 'bottles/caps "' – tpbowden