Если вы хотите что-то простое, которое обрабатывает только ваш особый случай, вы можете написать
Object.const_get("Admin").const_get("MetaDatasController")
Но если вы хотите что-то более общее, разбейте строку на ::
и разрешите имена одно за другим:
def class_from_string(str)
str.split('::').inject(Object) do |mod, class_name|
mod.const_get(class_name)
end
end
the_class = class_from_string("Admin::MetaDatasController")
На первой итерации Object
запрашивается константа Admin
и возвращает модуль или класс Admin
, затем на второй итерации этот модуль или класс запрашивается для константы MetaDatasController
и возвращает этот класс.Поскольку больше нет компонентов, этот класс возвращается из метода (если бы было больше компонентов, он итерировал бы, пока не нашел последний).