Erstellen eines Namenshelfers, um Vor- und Nachnamen getrennt zu trennen

7

Ich suche nach Hilfe, wie man ein Attribut annimmt und es durch eine Methode verarbeitet, um etwas anderes zurückzugeben. Aber ich habe das noch nie gemacht und bin mir nicht sicher, wo ich anfangen soll. Ich habe versucht, einen Namen zu ändern: String-Attribut von "George Washington" oder "John Quincy Adams" in Vornamen nur "George" und "John".

Ich dachte, vielleicht wäre eine Hilfsmethode am besten, wie

users_helper.rb

%Vor%

und dann @ user.name.first_name aufrufen, würde das zunächst so funktionieren? Kann mir jemand erklären, wohin ich als nächstes gehen würde, um @ user.name in die Methode zu übernehmen? Ich habe solche Dinge gesehen, verstehe es aber nicht ganz, die Klammern ...

%Vor%

Könnte jemand kaputt machen, wie rails / ruby ​​diese Art von Ding macht? Vielen Dank!

    
trying_hal9000 05.11.2011, 22:52
quelle

8 Antworten

5

Die Klammern (die optional sind) umschließen die Parameterliste.

%Vor%

Dies setzt voraus, dass der Parameter nicht null ist.

%Vor%

Aber das ist keine String-Methode, wie Sie jetzt annehmen:

%Vor%

Stattdessen:

%Vor%

Dies könnte in der Modellklasse selbst eingeschlossen sein:

%Vor%

Der zusätzliche Code überprüft, ob der Name Null oder Leerzeichen ist ( blank? kommt von Rails). Wenn dies der Fall ist, wird eine leere Zeichenfolge zurückgegeben. Ist dies nicht der Fall, teilt es es in Leerzeichen und gibt das erste Element im resultierenden Array zurück.

    
Dave Newton 05.11.2011, 23:06
quelle
10

Manche Leute haben mehr als zwei Namen, wie "John Clark Smith". Sie können sie wie folgt behandeln:

(1) Vorname: "John", Nachname: "Smith"

%Vor%

(2) Vorname: "John Clark", Nachname: "Smith"

%Vor%

(3) Vorname: "John", Nachname: "Clark Smith"

%Vor%

Die obigen Beispiele nehmen an, dass wenn der Name weniger als 2 Wörter enthält, dies ein Vorname ist.

    
Nicolas Kokkalis 03.06.2014 05:10
quelle
3

Wenn Sie nur einmal teilen möchten und beide Teile zur Verfügung stellen, funktioniert dieser eine Liner:

%Vor%

Macht das letzte Wort den Nachnamen und alles andere den Vornamen. Also, wenn es ein Präfix, "Dr.", oder einen zweiten Vornamen gibt, der mit dem Vornamen enthalten sein wird. Offensichtlich für Nachnamen, die separate Wörter haben, "Charles de Gaulle" wird es nicht funktionieren, aber die Handhabung ist viel schwieriger (wenn nicht unmöglich).

    
Eric Anderson 15.01.2015 15:48
quelle
1

Für die Syntax, nach der Sie fragen ( @user.name.first_name ) Rails macht eine Menge dieser Art von Erweiterungen, indem Methoden zu Basistypen hinzugefügt werden. In Ihrem Beispiel könnten Sie dies tun, indem Sie Methoden für die String-Klasse definieren.

%Vor%

Eine andere Möglichkeit, etwas zu tun, besteht darin, den Typ, den Sie erweitern möchten, zu umschließen. Auf diese Weise können Sie die gewünschte verrückte Syntax hinzufügen, ohne mehr Basistypen wie string zu verschmutzen.

%Vor%     
jdeseno 05.11.2011 23:09
quelle
1

Genau wie die große Antwort von Dave Newton, ist hier die "Nachname" -Version:

%Vor%     
Daniel Dener 07.12.2013 02:29
quelle
1

macht es einfach

%Vor%

Danke

    
przbadu 22.12.2015 05:16
quelle
1

Benutze Rubys Array#pop

Für meine Bedürfnisse musste ich vollständige Namen verwenden, die 1, 2, 3 oder mehr "Namen" in ihnen hatten, wie "AUSTIN" oder "AUSTIN J GILLEY".

Die Hilfsmethode

%Vor%

Verwenden Sie es

%Vor%

Und Sie können einfach first_name und last_name mit:

zuweisen %Vor%

Sie können von dort ausgehend ändern, was Sie brauchen oder wollen.

    
Joshua Pinter 20.12.2017 03:02
quelle
0
%Vor%

Ausgabe:

%Vor%     
Nate 29.06.2016 15:40
quelle