Ответ 1
require
(и его кузен load
) являются основными методами Ruby. require_dependency
- это метод, который помогает Rails обрабатывать проблему управления зависимостями. Короче говоря, он позволяет Rails перезагружать классы в режиме разработки, так что вам не нужно перезапускать сервер при каждом изменении кода. Рамка Rails будет require_dependency
вашего кода, чтобы она могла отслеживать и перезагружать ее при внесении изменений. Стандартный Ruby require
не делает этого. Как разработчик приложения (или плагин/движок) вам не нужно беспокоиться о require_dependency
, поскольку это чисто внутреннее Rails.
Магия процесса загрузки классов Rails находится в модуле ActiveSupport:: Dependencies. Этот код расширяет поведение Ruby по умолчанию, чтобы разрешить коду внутри вашего приложения Rails автоматически загружать модули (включая классы, которые наследуются от модуля), используя соглашения об именах путей и файлов Rails. Это устраняет необходимость того, чтобы программист помещал свой код в вызовы require
, как в обычном приложении Ruby.
Другими словами, это позволяет определить class Admin::User
внутри файла app/models/admin/user.rb
и знать, что вы говорите, когда вы звоните Admin::User.new
из другой части приложения, например контроллера. Без ActiveSupport:: Зависимости от вас потребуется вручную require
все, что вам нужно.
Если вы исходите из статически типизированного языка, такого как С#, Java и т.д., то это может быть неожиданностью: код Rails не загружается до тех пор, пока он не понадобится. Например, класс модели User
не определен и user.rb
не загружается до тех пор, пока вы не попробуете позвонить User.whatever_method_here
. Rails запрещает Ruby жаловаться на эту отсутствующую константу, загружает код для User
, а затем позволяет Ruby продолжать как обычно.
Пока я не могу говорить о вашей конкретной необходимости, я был бы очень удивлен, если бы вам действительно понадобилось использовать метод require_dependency
из плагина или движка. Если вы следуете соглашениям Rails, вам также не придется настраивать $LOAD_PATH вручную. Это не "путь Rails".
В мире Ruby и Rails простота и ясность являются ключевыми. Если все, что вы хотите сделать, это написать плагин или движок, и вы уже погружаетесь глубоко в внутренние части, тогда вы можете подумать о приближении своей проблемы под другим углом. Моя кишка говорит мне, что вы, возможно, пытаетесь сделать что-то ненужное. Но опять же, я не знаю, что вы делаете точно!:)