Ich versuche, einen Namen vom Schlangenfall in den Kamelfall umzuwandeln. Gibt es eingebaute Methoden?
ZB: "app_user"
zu"AppUser"
(Ich habe eine Zeichenfolge, die "app_user"
ich in ein Modell konvertieren möchte AppUser
).
ruby-on-rails
ruby
string
Lohith MV
quelle
quelle
ruby-on-rails
, also ist es wohl kein Problem. Aber danke fürs Erwähnen.#classify
stattdessen."some_namespace/module/class_name".classify => "SomeNamespace::Module::ClassName"
require "active_support/core_ext/string"
ist ausreichend, sofern Rails bereits installiert ist.Wie wäre es mit diesem?
In den Kommentaren hier zu finden: Klassifizieren Sie eine Ruby-Zeichenfolge
Siehe Kommentar von Wayne Conrad
quelle
Wenn Sie Rails verwenden, verwenden Sie
classify
. Es handhabt Randfälle gut.Hinweis:
Diese Antwort ist spezifisch für die Beschreibung in der Frage (sie ist nicht spezifisch für den Fragentitel). Wenn man versucht, einen String in einen Kamelkasten umzuwandeln, sollte man Sergios Antwort verwenden. Der Fragesteller gibt an, dass er
app_user
zuAppUser
(nichtApp_user
) konvertieren möchte , daher diese Antwort.quelle
classify
eine Zeichenfolge zurückgegeben wird, die Sie anschließend aufrufen müssenconstantize
, um sie in eine tatsächliche Klasse zu konvertieren.classify
ist, dass pluralisierte Saiten singulär werden ...'age_in_years'.classify
werdenAgeInYear
4.2.11
Quelle: http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
Zu Lernzwecken:
Und für die LowerCase-Variante:
quelle
self.split('_').inject([]){ |buffer,e| buffer + [buffer.empty? ? e : e.capitalize] }.join
Benchmark für reine Ruby-Lösungen
Ich habe alle Möglichkeiten genutzt, um dies mit reinem Ruby-Code zu tun. Hier sind sie:
kapitalisieren und gsub
&
Teilen und Zuordnen mit Kurzschrift (dank der Antwort von user3869936)Split und Map (dank Mr. Blacks Antwort)
Und hier ist der Benchmark für all dies. Wir können sehen, dass gsub dafür ziemlich schlecht ist. Ich habe 126 080 Wörter verwendet.
quelle
Ich bin hierher gekommen, um die Umkehrung Ihrer Frage zu suchen, von Kamelfall zu Schlangenfall. Verwenden Sie dazu einen Unterstrich (nicht dekamellisieren):
AppUser.name.underscore # => "app_user"
oder, wenn Sie bereits eine Kamelfallschnur haben:
"AppUser".underscore # => "app_user"
oder, wenn Sie den Tabellennamen erhalten möchten, weshalb Sie wahrscheinlich den Schlangenfall möchten:
AppUser.name.tableize # => "app_users"
quelle
AppUser.table_name
? Sie werden auch sicherstellen, dass der wahre Tabellenname vorhanden ist, wenn es sich nicht um app_users handelt, sondern um etwas, das an anderer Stelle definiert ist.Es ist mir etwas unangenehm, hier weitere Antworten hinzuzufügen. Beschlossen, den lesbarsten und minimalsten reinen Rubin-Ansatz zu wählen, ohne den netten Benchmark von @ ulysse-bn zu berücksichtigen. Während der
:class
Modus eine Kopie von @ user3869936 ist, sehe:method
ich den Modus hier in keiner anderen Antwort.Ergebnis ist:
quelle
PascalCase
ist eine Teilmenge vonCamelCase
. Auch das wusste ich - dieser Kamelfall galt für beide. Aber ich habe nie nachgeforscht. Vielen Dank, dass Sie PascalCase erwähnt haben. en.wikipedia.org/wiki/Camel_case:method
Version ein tatdowncase
zunächst so auf beide verwendet werden können ,lower_snake_case
undUPPER_SNAKE_CASE
.Die meisten anderen hier aufgeführten Methoden sind Rails-spezifisch. Wenn Sie dies mit reinem Ruby tun möchten, ist das Folgende die prägnanteste Methode, die ich mir ausgedacht habe (danke an @ ulysse-bn für die vorgeschlagene Verbesserung).
quelle
x.gsub(/(?:_|^)(\w)/){$1.upcase}
gsub
Lösung, die im Vergleich zurmap
Lösung langsamer zu sein scheint .Erweitern Sie den String, um Camelize hinzuzufügen
In reinem Ruby können Sie die Zeichenfolgenklasse mit genau demselben Code aus Rails erweitern
.camelize
quelle