У меня есть проект Ruby, который имеет следующую архитектуру:
Project architectureСделать унаследованную функцию динамического
Все мои дочерние контроллеры (city1, City2) наследуется от родительского контроллера в корне проекта. У меня есть метод в родительском контроллере:
class Controller
def get_directories
Dir.chdir(File.dirname(__FILE__) + "/")
Dir.glob('*').select { |f| File.directory? f }
end
end
Мой ребенок контроллеры:
require_relative '../controller'
class City1Controller < Controller
end
и
require_relative '../controller'
class City2Controller < Controller
end
В моем понимании, этот метод выглядит на текущем рабочем каталоге и возвращает массив папок, находящихся внутри этого каталога.
Я ожидал, что дочерние контроллеры будут наследовать эту функцию таким образом, что get_directories будет локальным для дочернего каталога, но он показывает папки в родительском каталоге.
Вот что происходит:
controller.get_directories => city1 city2
city1_controller.get_directories => city1 city2
city2_controller.get_directories => city1 city2
Вот что я хочу, чтобы это произошло:
controller.get_directories => city1 city2
city1_controller.get_directories => monument1 monument2
city2_controller.get_directories => monument3 monument4
Если я повторить тот же метод в каждом контроллере ребенка (тем самым отменяя родительское определение), он работает как я хочу. Но разве не то, что наследство должно нас пощадить?
Является ли проблема в самом методе, как работает наследование или как я его использую?
сообщение здесь все напрямую. Никакая часть вашего вопроса не должна опираться на внешний сайт. И если у вас есть код, разместите его здесь как текст, а не изображение. – Carcigenicate
Извините, мне пришлось устранить неполадки, какая часть моего текстового стека не понравилась (дала ошибку о коде) –
Проблема в том, как вы ее используете. '__FILE__' не является методом, и вы не должны ожидать от него поведения, подобного методу. –