рельсы: как преобразовать символ в класс - PullRequest
16 голосов
/ 29 января 2010

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

give_class(:post).find(:all)

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

Ответы [ 2 ]

44 голосов
/ 29 января 2010

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

class_name = symbol.to_s

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

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

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

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

klass = class_name.constantize

Классный!

4 голосов
/ 29 января 2010

Я искал stackoverflow для этого ответа и не мог найти его, сформулировав, как я его искал, поэтому я подумал, что сам задам вопросы и ответы:

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

Существует два основных метода:

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

От этого ты звонишь, константируй, а Виола! у вас есть свой класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...