Schienen-Modell: - Name — Vorname, Nachname
Ich bin Recht neu auf Schienen, arbeiten auf einer Rails 3 Anwendung mit einem Profil-Modell für die Nutzer.
In der Profil-Modell ich würde gerne ein "name" - Eintrag, und ich möchte in der Lage sein, um einen Zugang zu den logischen Variationen es mit einer einfachen syntax wie:
user.profile.name = "John Doe"
user.profile.name.first = "John"
user.profile.name.last = "Doe"
Ist das möglich, oder brauche ich einen stick mit "first_name" und "last_name", wie meine Felder in diesem Modell?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es möglich, aber ich würde nicht empfehlen es.
Ich würde nur stick mit
first_name
undlast_name
wenn ich Sie und fügen Sie eine Methodefullname
:Edit:
Wenn Sie wirklich tun wollen
user.profile.name
, Sie konnte erstellen eineName
Modell wie folgt:Das können Sie tun:
Die anderen Antworten sind alle richtig, soweit Sie ignorieren die #composed_of aggregator:
Wie erwähnt auf der #composed_of Seite, müssen Sie die Zuordnung eine neue Instanz des Aggregators: Sie können ersetzen Sie einfach die Werte innerhalb der aggregator. Die aggregator-Klasse fungiert als ein Wert, der nur wie ein einfacher string oder eine Zahl.
Ich schickte auch eine Antwort gestern mit einem sehr ähnlichen Antwort: Wie man am besten zum zuordnen einer Adresse zu mehreren Modellen in rails?
Als Capt. Tokio sagte, das ist eine schreckliche Idee, aber hier ist, wie Sie es tun würde:
Dann würden Sie speichern Ihre Daten in es so auf:
Nun Ihre Probleme beginnen.
Suche das Feld erfordert beide Namen und Sie können nicht eine partielle Suche, wie die Suche für alle Menschen mit den gleichen Nachnamen. Das Schlimmste von allen, die Sie speichern können alles in das Feld! So vorstellen, ein anderer Programmierer falsch eintippt eine der Feldnamen so für eine Woche, Sie haben {:fist => "Name": last => "Letzte"} in die Datenbank eingefügt! Noooooooooooooooooo!
Wenn Sie die richtigen Feldnamen, Sie könnten dies tun:
Leicht zu Lesen und keine Notwendigkeit für hashes. Jetzt wissen Sie, wie zu tun es der falsche Weg, tun es der richtige Weg. 🙂
FYI (angenommen Sie haben ein Feld
fullname
. ie Ihreprofile.name = "John Doe"
)Nun, Sie könnten so etwas tun:
Hinweis: der folgende Fall:
Ich Stimme mit captaintokyo. Verpassen Sie die mittleren Namen.
Auch bei dieser Methode übernehmen keine chinesische, japanische Namen eingegeben werden. Es ist, weil diese Namen enthalten keine Leerzeichen zwischen Vorname und Nachname in der Regel.