Программно получите список всех диспетчеров в данном пространстве имен

У наших Рельсов 3.2 применения есть панель администрации. Панель администрации разделена на модули. Например, есть Администратора:: Поиск . Я хочу повторно учесть некоторых повторяющихся и hardcoded partials. Например:

    <% %w(tests fuzzy stats terms hits).each do |tab| %>
  • <%= link_to tab.humanize, [:admin, :searching, tab] %>
  • <% end %>

Это ищет военно-морской раздел после добавления другого диспетчера, необходимо изменить его вручную. то, Что я хочу, получая список всех диспетчеров в Администратор:: Поиск (диспетчеры в этом пространстве имен - подклассы Администратор:: AdminController ). Я полагаю, что возможно сделать это изящным способом от API Рельсов. Тогда это может быть обобщено для всех счетов модулей.

Я попытался проверить Администратора:: AdminController.subclasses, но классы в том множестве ленивы загруженный поэтому после совершающий нападки Условия , например, после перезапуска сервера, есть только один элемент [Администратор:: Поиск:: TermsController] , и после посещения других модулей есть также другие диспетчеры. Я мог повторить по ним и базироваться на controller_path результаты, отфильтровать, только администратора/поиск диспетчеры. Возможно, это возможно от конца маршрутов? Я имею в виду, я мог получить всех диспетчеров в данном пространстве имен от Rails.application.routes.routes?

Я не хочу добираться до файловой системы. Я знаю, что мог отсканировать справочник администратора/поиска с Директор , но это неэффективно.

0

1 ответы

У меня был целый хороший ответ, описывающий использование Module#constants и Module#const_get , но тогда я читал до последней части вашего вопроса и понял, что эта техника, вероятно, не будет работать по той же самой причине что Администратор:: AdminController.subclasses не делает — и это вызвано тем, что Рельсы лениво загружают классы контроллера по мере необходимости.

В вашем случае я, вероятно, только закончил бы тем, что делал директивный просмотр. Вы думаете, что это неэффективно, но Рельсы и много драгоценных камней Руби заканчивают тем, что шли в файловую систему так или иначе, делая динамическую погрузку и материал.

Теперь, вы хотите найти все (соответствующие) диспетчеры прежде , они загружаются так или иначе. Соедините это с пониманием, которое в производстве, не изменяет число диспетчеров.

То, что я пытаюсь сказать, идите вперед и сделайте Директора просмотр, но сделайте это в инициализаторе (файл в соответствии с конфигурация/инициализаторы ), таким образом, это только выполняется однажды, в начале вашего приложения.

Так, очевидно,

# config/initializers/admin.rb
module Admin
  CONTROLLERS = begin
    # Do a directory scan of app/controllers/admin looking for relevant files
  end
end
2
добавлено
Ну, я нашел Как программно перечислить всех диспетчеров в Рельсах который мог бы помочь вам.
добавлено автор Alistair A. Israel, источник
Хорошо, спасибо за ответ. Тем не менее это будет выполнено каждый раз, когда окружающая среда будет загружена, таким образом, в задачах граблей/Тора и тестах. Я рассмотрю его, если не будет никакого лучшего решения, но что относительно маршрутов? Есть информация о namspaces и диспетчерах в нем. Я могу получить ту информацию программно?
добавлено автор Casual Coder, источник
pro.ruby
pro.ruby
1 181 участник(ов)

Язык программирования Ruby Additional docs: https://rubyreferences.github.io/rubyref/ Invite: https://telegram.me/joinchat/Be4rsT2NuB3CyJaF26j1kA Кто хочет компилировать: @crystal_ru (его синтаксис основан на Ruby) Участник @proDOT

Ruby, Rails, Hanami | dry-rb
Ruby, Rails, Hanami | dry-rb
1 180 участник(ов)

https://telegram.me/rubyjob - Ruby Job По вопросам - @eugene_shved

Ruby School .us
Ruby School .us
1 045 участник(ов)

Чат-болталка для учеников руби-школы и не только. Правила: https://telegra.ph/Pravila-chata-Rubi-shkoly-03-13

Random Ruby Chat
Random Ruby Chat
589 участник(ов)

Правила публикации вакансий: https://t.me/codenamecrud/60865

Rubyata
Rubyata
333 участник(ов)

Коммюнити Ruby и Ruby On Rails Флуд не приветствуются. Вакансии можно публиковать только и ТОЛЬКО по пятницам с хештегом #вакансия.

Ruby Talks
Ruby Talks
236 участник(ов)

Национальная Флеймотека

RubyRush
RubyRush
189 участник(ов)

rubyrush.ru программирование для самых новичков

Rails Chat
Rails Chat
87 участник(ов)

You are welcome to discuss Ruby On Rails development process and other stuff