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!
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.
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.
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).
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.
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%Genau wie die große Antwort von Dave Newton, ist hier die "Nachname" -Version:
%Vor%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".
Und Sie können einfach first_name
und last_name
mit:
Sie können von dort ausgehend ändern, was Sie brauchen oder wollen.
Tags und Links ruby-on-rails-3 ruby-on-rails