Ярлык для Пространства имен класса в Rails - PullRequest
0 голосов
/ 16 мая 2018

В Rails, как можно разместить пространство имен класса контроллера со следующей строкой кода, не определяя где-либо MyModule?

class MyModule::MyClass < ApplicationController

Я знаю, что это вызовет NameError в Ruby (так как вы вызываетемодуль, который не существует), но по какой-то причине он работает в Rails.Какая скрытая механика делает это «короткое» пространство имен возможным?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Похоже, вы делаете контроллер здесь, и Rails очень внимательно относится к соглашениям об именах файлов для контроллеров. Это должно быть в app/controllers/my_module/my_class_controller.rb.

Если это не работает, вы также можете определить модуль в строке, не имеет значения, если он также определен в другом месте.

module MyModule
  class MyClassController < ApplicationController
0 голосов
/ 16 мая 2018

Это называется автозагрузка . По имени константы Rails угадывает имя пути, где может находиться его определение, и пытается загрузить его.

В частности, ожидается, что пространство имен, подобное вашему MyModule, будет соответствовать имени каталога, в котором, как ожидается, будет существовать файл с определением MyClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...