Ответ 1
Чтобы использовать new
, то, что ваш вызов должен быть классом, а не модулем. Вы используете модуль. Измените module
на class
в lib/utilities/network_utility.rb
.
Это, наверное, глупый вопрос, но я новичок в Ruby on Rails, и я мог бы использовать небольшое руководство. Я хочу иметь класс helper/utility, который выполняет группу сетевых операций и возвращает результаты. Где я помещаю этот класс и как его использовать.
Я создал network_helper.rb в каталоге моего приложения /modulename/helpers. В моем контроллере, когда я пытаюсь сделать
myNetworkHelper = ModuleName::NetworkHelper.new
results = myNetworkHelper.getResults
Я получаю сообщение об ошибке
undefined method `new' for MyModule::NetworkHelper:Module
Я уверен, что это просто непонимание того, как работает рубин на рельсах. Могу ли я получить разъяснения?
Было бы лучше сделать этот класс вместо модуля и поместить его в libs? И могу ли я добавить подпапки в libs и автоматически загрузить их?
Чтобы использовать new
, то, что ваш вызов должен быть классом, а не модулем. Вы используете модуль. Измените module
на class
в lib/utilities/network_utility.rb
.
Небольшие классы полезности, подобные этому, обычно входят в папку lib, хотя некоторые люди предпочитают создавать папку под названием classes. Какой бы вы ни выбрали, убедитесь, что вы импортируете папку в config/application.rb, так как папка lib не загружена автоматически:
config.autoload_paths += %W(#{config.root}/lib)
Если вместо класса утилиты вы хотите расширить некоторые из своих моделей с помощью многоразового кода, вы также можете посмотреть новые папки Rails 4, которые помогут вам извлечь повторно используемые модули:
Я не могу проверить это на данный момент, однако я считаю, что одно место, где вы можете хранить свои настраиваемые модули и классы, - это каталог lib
. Кроме того, вы должны иметь возможность хранить их в каталоге app
так, как вы указали, добавив следующую строку в вашу среду. Rb:
config.load_paths << File.join(Rails.root, "app", "modulename")
Кроме того, проверьте ответ Yehuda Katz, который, я думаю, не только лучше отвечает на ваш вопрос, но также содержит очень интересную и полезную информацию и концепции, касающиеся вашей ситуации, Надеюсь, что это поможет!