Как использовать одно и то же имя класса для нескольких модулей?

#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