2010-01-29 15 views

risposta

39

Innanzitutto, convertire in stringa.

class_name = symbol.to_s 

Da lì, è necessario formattare la stringa in un nome di classe corretto utilizzando i metodi forniti da ActiveSupport's Inflector.

  • camelize si trasformerà in 'my_module''MyModule'
  • classify si trasformerà in 'my_models''MyModel'

camelize è più probabile quello che si desidera, dato il vostro frammento di codice.

quindi utilizzare il metodo constantize:

klass = class_name.constantize 

Classy!

4

ero alla ricerca StackOverflow per questa risposta e non sono riuscito a trovarlo formulata come ero alla ricerca di esso, così ho pensato di Q & A me stesso:

La risposta sopra era corretta, ma ho acutally trovato i documenti che spiegano un po 'meglio:

Ci sono fondamentalmente due metodi:

  • .to_s.camelize - usato quando si ha la forma singolare (: post)
  • .to_s.classify - usato quando si dispone di una forma plurale (: post)

Da ciò si chiama constantize e Viola! hai la tua classe.

+0

Mhm. Dipende se stai per passare il nome effettivo della classe ': MyClass', o preferisci il formato': my_class'. – Matchu

+0

Sì, è giusto. Questa è stata la parte che mi ha incitato. Soprattutto la differenza tra singolare e plurale. – dpb

+2

Sembra che ci sia una versione aggiornata per Rails 3 http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html – christophercotton

Problemi correlati