Rails: Как преобразовать символ в класс

Учитывая символ в рельсах, как мне получить класс? Поэтому я мог бы назвать что-то вроде:

give_class(:post).find(:all)

или аналогичный.

Ответы

Ответ 1

Сначала преобразуем в строку.

class_name = symbol.to_s

Оттуда вам нужно будет отформатировать строку в соответствующее имя класса, используя методы, предоставленные ActiveSupport Inflector.

  • camelize превратит 'my_module' в 'MyModule'
  • classify превратит 'my_models' в 'MyModel'

camelize, скорее всего, тот, который вы хотите, учитывая ваш фрагмент кода.

Затем используйте метод constantize:

klass = class_name.constantize

Классный!

Ответ 2

Я искал stackoverflow для этого ответа и не мог найти его в тексте, как я его искал, поэтому я решил, что Q & A сам:

Ответ выше был правильным, но я обнаружил документы, которые объясняют немного лучше:

В основном существуют два метода:

  • .to_s.camelize - используется, когда у вас есть единственная форма (: post)
  • .to_s.classify - используется, когда у вас есть множественная форма (: сообщения)

Из этого вы вызываете константизацию и Виолу! у вас есть свой класс.