2010-01-29 26 views

Respuesta

39

Primero, conviértanse a la cadena.

class_name = symbol.to_s 

A partir de ahí, tendrá que dar formato a la cadena en un nombre de la clase adecuada utilizando los métodos proporcionados por ActiveSupport's Inflector.

  • camelize se convertirán en 'my_module''MyModule'
  • classify a su vez, 'my_models' en 'MyModel'

camelize es más probable el que desee, teniendo en cuenta su fragmento de código.

continuación, utilizar el método de constantize:

klass = class_name.constantize 

con clase!

4

que estaba buscando stackoverflow para esta respuesta y no pude encontrar redactado como yo estaba buscando, así que pensé que lo haría Q & A mí mismo:

La respuesta anteriormente era correcta, pero me encontré; fuimos los documentos que explican un poco mejor:

Existen básicamente dos métodos:

  • .to_s.camelize - se utiliza cuando se tiene la forma singular (: post)
  • .to_s.classify - se utiliza cuando se tiene una forma plural (: publicaciones)

A partir de ahí, llamas a constantize, ¡y Viola! tienes tu clase

+0

Mhm. Depende de si va a pasar el nombre de clase real ': MyClass', o prefiere el formato': my_class'. – Matchu

+0

Sí, eso es correcto. Esa fue la parte que me estaba molestando. Especialmente la diferencia entre singular y plural. – dpb

+2

Parece que hay una versión actualizada de Rails 3 http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html – christophercotton

Cuestiones relacionadas