У меня аналогичное требование, передавая имя класса в виде строки.Одна хитрость с require заключается в том, что он не обязательно должен быть в начале, поэтому я предпочитаю загружать только тот класс, который мне нужен.
Я использовал eval, потому что у него нет зависимостей Rails (янаписание чистого кода Ruby здесь).
Следующее основано на соглашении (что класс находится в файле с тем же именем), но если вы знаете класс и файл, то этот подход имеет то преимущество, что не требуеткаждый файл в каталоге и только динамически загружает тот, который вам нужен, в тот момент, когда он вам нужен.
klass = "classname"
begin
# Load the file containing the class from same directory I'm executing in
require_relative klass # Or pass a local directory like "lib/#{klass}"
# Use eval to convert that string to a Constant (also capitalize it first)
k = eval(klass.capitalize).new
rescue
# Do something if the convention fails and class cannot be instantiated.
end
k.foo # Go ahead and start doing things with your new class.