2016-09-21 3 views
0

Ich habe ein User Modell, das has_one Profile (gehört zu Benutzer). Der Einfachheit halber sage ich nur, dass das Profil ein location Feld und ein occupation Feld hat.Schienen: Aufbau einer has_one Beziehung in einem Modell mit Omniauth

Ich benutze Omniauth, um Benutzer zu erstellen, aber ich möchte auch das beigefügte Profile zur gleichen Zeit erstellen. Derzeit ist meine create von omniauth Methode ist wie folgt:

def self.create_from_omniauth(omniauth_data) 
    full_name = omniauth_data["info"]["name"].split(" ") 
    User.create(
     provider: omniauth_data["provider"], 
     uid: omniauth_data["uid"], 
     first_name: full_name[0], 
     last_name: full_name[1], 
     email: omniauth_data["info"]["email"], 
     password: SecureRandom.hex(16) 
) 
end 

Ich frage mich, wie ich soll das Gebäude des Profils in dem enthalten. Ich weiß mit has_one habe ich Zugriff auf die build_profile Methode, aber ich möchte auch sicherstellen, dass es richtig mit meinem Benutzerobjekt verbunden ist. Jeder Einblick in, wie ich diese create_from_omniauth Aktion neu formatieren sollte, um das zugehörige Profile neben dem User Objekt richtig zu errichten, würde extrem nützlich sein.

+0

Es gibt mindestens zwei Möglichkeiten und wenn Sie die dritte Zeile in 'user = User.create' ändern, können Sie' user.create_profile() 'ausführen. Statt 'User.create' und' user.create_profile' verwenden Sie build und speichern dann alles auf einmal mit 'user.save' –

Antwort

1

Der einfachere Weg, um zu tun, was Sie wollen, ist die Benutzer # show Aktion für das Profil. Anstatt ein Profilmodell mit einer Profiltabelle in der Datenbank zu erstellen (Speicherverschwendung), sollten Sie die Präsentation nicht nur für Ihre Benutzer als Profil verwenden. In diesem Fall können Sie die Route für Ihre Show-Aktion als Profil umbenennen.

+0

Mein' Profil' Modell behandelt mehr als nur dieses vereinfachte Beispiel, also brauche ich die has_one Beziehung I Diese Felder können nicht einfach in das Modell 'Benutzer' eingefügt werden. Ich möchte nur die ersten Stücke aus den 'Omniauth'-Daten bauen – Brett

Verwandte Themen