277 votes

Conversion de cas de chameau pour souligner la casse en rubis

Existe-t-il une fonction prête à convertir les chaînes de cas en chameaux en chaînes séparées par des soulignés?

Je veux quelque chose comme ça:

 "CamelCaseString".to_underscore      
 

pour retourner "camel_case_string".

...

415voto

jrhicks Points 5369

ActiveSupport de Rails ajoute un trait de soulignement à la chaîne en utilisant les éléments suivants:

 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
 

Ensuite, vous pouvez faire des choses amusantes:

 "CamelCase".underscore
=> "camel_case"
 

138voto

leef Points 253

vous pouvez utiliser

"CamelCasedName" .tableize.singularize

OU

"CamelCasedName" .underscore

et les deux vous donneront

camel_cased_name

vous pouvez le vérifier ici

57voto

kirushik Points 804

Implémentation Ruby One-Liner:

 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
 

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

21voto

Pesto Points 16648

Voici comment Rails le fait :

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

8voto

Mr. Black Points 2342

Récepteur converti en cas de serpent : http://rubydoc.info/gems/extlib/0.9.15/String#snake_case-instance_method

Il s’agit de la bibliothèque de Support pour DataMapper et Merb. (http://rubygems.org/gems/extlib)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X