#ruby-on-rails #ruby #parent-child
#ruby-on-rails #ruby #родитель-потомок
Вопрос:
Как использовать одно и то же имя класса для нескольких модулей?
У меня есть основной ApplicationService
# /app/services/application_service.rb
class ApplicationService; end
# /app/services/processing/queue/application_service.rb
module Processing
module Queue
class ApplicationService < ApplicationService; end
end
end
# /app/services/processing/callback/application_service.rb
module Processing
module Callback
class ApplicationService < ApplicationService; end
end
end
Как заставить rails не путаться и знать, как использовать /app/services/application_service.rb
Все мои сервисы /app/services/processing/queue/
имеют /app/services/processing/queue/application_service.rb
родительский класс.
Комментарии:
1. Использование
::ApplicationService
Ответ №1:
Используйте полное имя (полное имя) ::ApplicationService
для ссылки на ваш класс верхнего уровня.
module Processing
module Callback
class ApplicationService < ::ApplicationService; end
end
end
Комментарии:
1. Спасибо, я попробовал, но, похоже, это все еще сбивает с толку. Например: у меня есть метод
foo
в расширяющемся классеCallback::ApplicationService
, и иногда он сообщает мне, что этот метод не существует. Иногда это становится корыто.2. @DanielCosta JFYI,
Callback::ApplicationService
в вашем коде нет класса. ТолькоProcessing::Callback::ApplicationService
. Когда у вас есть такие конфликтующие имена, будьте очень откровенны в отношении полных имен.3. Да, я имел
Processing::Callback::ApplicationService
в виду, а неCallback::ApplicationService