2010-01-29 3 views

Répondre

39

D'abord, convertir en chaîne.

class_name = symbol.to_s 

De là, vous aurez besoin de formater la chaîne en un nom de classe appropriée en utilisant les méthodes fournies par ActiveSupport's Inflector.

  • camelize se tourneront 'my_module' en 'MyModule'
  • classify se transformeront en 'my_models''MyModel'

camelize est plus probablement celui que vous voulez, compte tenu de l'extrait de code.

Ensuite, utilisez la méthode constantize:

klass = class_name.constantize 

classe!

4

Je cherchais stackoverflow pour cette réponse et ne pouvait pas trouver comment je formulé cherchais, alors je pensais Q & moi-même:

La réponse ci-dessus était correct, mais j'ai trouvé acutally les documents qui expliquent un peu mieux:

Il existe essentiellement deux méthodes:

  • .to_s.camelize - utilisé lorsque vous avez le singulier (: post)
  • .to_s.classify - utilisé lorsque vous avez une forme plurielle (: messages)

De là, vous appelez constantize, et Viola! tu as ta classe.

+0

Mhm. Cela dépend si vous allez passer le nom de classe réel ': MyClass', ou préférez le format': my_class'. – Matchu

+0

Oui, c'est vrai. C'était la partie qui me faisait trébucher. Surtout la différence entre singulier et pluriel. – dpb

+2

On dirait qu'il existe une version mise à jour pour Rails 3 http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html – christophercotton

Questions connexes