Wenn Sie ein Wort verwenden, das aus mehreren Wörtern in einem Bezeichner besteht, können Sie keine Leerzeichen einfügen, daher müssen Sie irgendwie ein Worttrennzeichen darstellen. Beispielsweise wird die folgende Notation verwendet.
ActiveSupport bietet eine Reihe nützlicher Methoden zum Konvertieren zwischen diesen.
Sie können String # underscore
verwenden, um CamelCase in snake_case zu konvertieren.
Sie können String # camelize
verwenden, um snake_case in UpperCamelCase [^ lcc] zu konvertieren.
[^ lcc]: Verwenden Sie camelize (: lower)
, um in lowerCamelCase zu konvertieren.
Wie nachstehend:
require "active_support/inflector"
p "BookTitle".underscore # => "book_title"
p "book_title".camelize # => "BookTitle"
Wenn man dies betrachtet, sind "Unterstrich" und "Kamelisieren" inverse Umrechnungen voneinander.
require "active_support/inflector"
p "BookTitle".underscore.camelize # => "BookTitle"
p "book_title".camelize.underscore # => "book_title"
Es scheint (immer) zum Original zurückzukehren, wenn sich beide wie überlappen.
In einigen Fällen ist dies jedoch nicht der Fall. das ist
require "active_support/inflector"
p "OfficialURL".underscore # => "official_url"
p "CSVFile".underscore # => "csv_file"
Dies ist ein Fall, der Wörter enthält, die nur aus Großbuchstaben bestehen, z. B. "URL" und "CSV". Die "Unterstrich" -Methode teilt "CSVFile" in "CSV" und "File" in einen Schlangenfall auf, wie es Menschen erwarten würden. Dadurch geht jedoch die Information verloren, dass die konvertierten "url" und "csv" ursprünglich nur in Großbuchstaben geschrieben wurden, sodass "camelize" sie nicht wiederherstellt.
require "active_support/inflector"
p "OfficialURL".underscore.camelize # => "OfficialUrl"
p "CSVFile".underscore.camelize # => "CsvFile"
Es war ein Beispiel dafür, dass selbst eine bequeme Methode in eine Falle geraten könnte, wenn die Spezifikationen nicht gut verstanden und verwendet werden. (Eines Tages war ich tatsächlich süchtig danach!)
[^ ot]: Anfangs habe ich es mit einem Code wie gsub (/. (? = [AZ]) /) {$ & +" _ "} .downcase
zu einem snake_case gemacht und später die Verarbeitung mit ActiveSupport gemischt. Manchmal ging etwas schief.
Recommended Posts