Conversión de mayúsculas y minúsculas a mayúsculas y minúsculas en Ruby

Resuelto Daniel Cukier asked hace 15 años • 12 respuestas

¿Existe alguna función lista que convierta cadenas de mayúsculas y minúsculas en cadenas separadas por guiones bajos?

Quiero algo como esto:

"CamelCaseString".to_underscore      

para devolver "camel_case_string".

...

Daniel Cukier avatar Oct 02 '09 21:10 Daniel Cukier
Aceptado

ActiveSupport de Rails agrega un guión bajo a la cadena usando lo siguiente:

class String
  def underscore
    self.gsub(/::/, '/').
    gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').
    gsub(/([a-z\d])([A-Z])/,'\1_\2').
    tr("-", "_").
    downcase
  end
end

Entonces puedes hacer cosas divertidas:

"CamelCase".underscore
=> "camel_case"
jrhicks avatar Oct 02 '2009 14:10 jrhicks

Puedes usar

"CamelCasedName".tableize.singularize

O solo

"CamelCasedName".underscore

Ambas opciones darán resultado "camel_cased_name". Puedes consultar más detalles aquí .

Debe solicitarlo active_support/inflectorpara que funcione (ver comentarios).

abo-elleef avatar Nov 17 '2013 20:11 abo-elleef

Implementación de Ruby de una sola línea:

class String
   # ruby mutation methods have the expectation to return self if a mutation occurred, nil otherwise. (see http://www.ruby-doc.org/core-1.9.3/String.html#method-i-gsub-21)
   def to_underscore!
     gsub!(/(.)([A-Z])/,'\1_\2')
     downcase!
   end

   def to_underscore
     dup.tap { |s| s.to_underscore! }
   end
end

Entonces"SomeCamelCase".to_underscore # =>"some_camel_case"

kirushik avatar Oct 02 '2009 15:10 kirushik

Hay un método incorporado en Rails llamado 'guión bajo' que puedes usar para este propósito

"CamelCaseString".underscore #=> "camel_case_string" 

El método de "guión bajo" normalmente se puede considerar como el inverso de "camelizar".

Aaditi Jain avatar Sep 15 '2014 20:09 Aaditi Jain