преобразовать строку в имя класса в рельсах - PullRequest
1 голос
/ 11 октября 2019

У меня есть переменная handler, значение которой может быть flight_gds, flight_commission etc.

В моем приложении есть classes с именами, такими как FlightGds, FlightCommission и т. Д. Под module FlightManager.

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

Например:
Если имя обработчика 'flight_gds', то функция будет FlightManager::FlightGds.calculate()

Я пытаюсь что-то вроде этого:

FlightManager::handler.camelize.calculate()

Но я получаю undefined method handler ошибку.

Есть ли способ сделать это, или я должен пойти с if/else цикл?

1 Ответ

7 голосов
/ 11 октября 2019

Вы должны использовать constantize, чтобы получить класс на основе его имени в строке:

"FlightManager::#{handler.camelize}".constantize.calculate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...