Это должно быть безопасно, но это зависит от того, что вы делаете с ним после.
Если, например, вы позже вызываете #delete
для класса, ввод File
будетопасный.
Мой предпочтительный подход состоит в том, чтобы сохранить все доступные пользователю классы этого типа в модуле, а затем проверить ввод данных пользователя по #constants
этого модуля.Это гарантирует, что вы открываете для пользователя только небольшой подраздел раздела имен ruby, а также позволяет создавать раскрывающиеся списки, чтобы пользователи могли выбирать модуль, а не просто угадывать имена.
Другой способобеспечение того же уровня безопасности заключается в добавлении префикса имени этого модуля, полного доступных классов, в начале пользовательского ввода.
module AvailableClasses
Foo = ::Foo
Bar = ::Bar
end
validates_inclusion_of :user_input, :in => AvailableClasses.constants
AvailableClasses.const_get(user_input)
"AvailableClasses::#{user_input}".constantize