Помощники, методы и организация занятий
Когда мой проект растет, мне нужно написать несколько методов, но частные методы и помощники application_controller не предоставляют достаточно места для хранения всех расширений.
Поэтому я посмотрел на пользовательские классы и методы, которые хранятся в папке /lib.
Но у меня все еще есть некоторые вопросы, которые я не могу решить:
-Когда мне следует использовать "class << self"? У меня есть класс, чтобы вычислить разницу между двумя массивами чисел, а затем вернуть новый массив со средними значениями этих чисел. Я привык к такому коду:
x = MyClass.new
x.calculate(array1, array2)
И затем я поместил методы своего класса в "class << self; end", чтобы использовать класс без инициализации. Это правильное решение?
-Когда мне использовать пользовательские модули? Всегда ли нужно "включать" или "требовать" их? Расскажите, пожалуйста, о ваших модулях в ваших проектах, когда вы их используете?
-Как я могу вызвать метод помощника в контроллере? Я хочу использовать в AJAX отклик. Например, я использую вспомогательный метод 'users_for_output', и, если был вызов ajax, мое приложение должно отображать только пользователей как текст, чтобы обработать его после JavaScript.
1 ответ
1) Вам не нужно создавать экземпляр класса для вызова статического метода, т.е.
MyUtil.do_something
Против
MyUtil.new.do_something
В моем проекте я держу такие методы статичными.
2) Вы можете использовать модули, когда хотите поделиться набором функций между классами. Прочитайте этот миксин против обсуждения наследования. Вы получите хорошее представление о том, когда использовать модули.
2.1) included
Метод предназначен для инициализации переменных модуля. Вам не нужно использовать его, если у вас нет ничего инициализировать.
3) Если вы хотите представить метод контроллера как вспомогательный метод, используйте helper_method
вызовите в вашем классе ApplicationController.
class ApplicationController < ActionController::Base
helper_method :user_for_output
end