Conversión de mayúsculas y minúsculas a mayúsculas y minúsculas en Ruby
¿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".
...
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"
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/inflector
para que funcione (ver comentarios).
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"
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".