Lorsque vous utilisez un mot composé de plusieurs mots dans un identificateur, vous ne pouvez pas inclure d'espaces, vous devez donc en quelque sorte représenter un délimiteur de mot. Par exemple, la notation suivante est utilisée.
ActiveSupport fournit un ensemble de méthodes utiles pour convertir entre celles-ci.
Vous pouvez utiliser String # underscore
pour convertir CamelCase en snake_case.
Vous pouvez utiliser String # camelize
pour convertir snake_case en UpperCamelCase [^ lcc].
[^ lcc]: Utilisez camelize (: lower)
pour convertir en lowerCamelCase.
Comme ci-dessous:
require "active_support/inflector"
p "BookTitle".underscore # => "book_title"
p "book_title".camelize # => "BookTitle"
En regardant cela, ʻunderscore et
camelize` sont des conversions inverses l'une de l'autre.
require "active_support/inflector"
p "BookTitle".underscore.camelize # => "BookTitle"
p "book_title".camelize.underscore # => "book_title"
Il semble (toujours) revenir à l'original lorsque les deux se chevauchent comme.
Cependant, dans certains cas, ce n'est pas le cas. C'est
require "active_support/inflector"
p "OfficialURL".underscore # => "official_url"
p "CSVFile".underscore # => "csv_file"
Il s'agit d'un cas qui contient des mots composés uniquement de lettres majuscules, telles que ʻURLet
CSV. La méthode ʻunderscore
divise CSVFile
en CSV
et File
en un snake_case, comme les humains s'y attendraient.
Cependant, cela perd les informations selon lesquelles les «url» et «csv» convertis étaient à l'origine épelés en majuscules uniquement, donc «camelize» ne les restaurera pas.
require "active_support/inflector"
p "OfficialURL".underscore.camelize # => "OfficialUrl"
p "CSVFile".underscore.camelize # => "CsvFile"
C'était un exemple qu'une méthode pratique pouvait tomber dans un piège si les spécifications ne sont pas bien comprises et utilisées. (Un jour, j'étais accro à [^ ot], en fait!)
[^ ot]: Au départ, je l'ai transformé en un snake_case avec un code comme gsub (/. (? = [AZ]) /) {$ & +" _ "} .downcase
, puis j'ai mélangé le traitement en utilisant ActiveSupport. Parfois, quelque chose a mal tourné.
Recommended Posts