2016-03-23 5 views
1

Ich habe Probleme herauszufinden, wie man automatisch ein Benutzerprofilobjekt erstellt, sobald sich ein Benutzer mit devise angemeldet hat. Mein Profilobjekt wurde gerüstet, jetzt ist es ein Fall, das leere Objekt Profile.new zum Benutzerobjekt hinzuzufügen. Der folgende Code ist aus registrations_controller.rbProfilobjekt automatisch hinzufügen, nachdem Devise/Rails erfolgreich registriert wurde

protected 

    # If you have extra params to permit, append them to the sanitizer. 
    def configure_sign_up_params 
    devise_parameter_sanitizer.for(:sign_up) << :profile_id 
    end 

    # The path used after sign up. 
    def after_sign_up_path_for(resource) 
    p "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$" 

    resource.profile << Profile.new 
    p resource 
    super(resource) 
    end 

Was passiert, ist, dass in der Rails-Konsole, die p ‚$$$$ ..‘ Linie sichtbar ist und keine Fehler vorhanden sind. In psql, wenn Sie die profile_id betrachten, ist jedoch null. Ich kratze mich seit Stunden am Kopf, ist das der beste Weg dies zu tun, indem ich es in Devices Santisierer gebe?

Wir haben uns gedacht, stattdessen auf die create_profile-Ansicht umzuleiten, die gerüstet wurde, aber in dem Fall, in dem ein Benutzer sich anmeldet und dann das Profil nicht vervollständigt, hätten wir ein Problem. Hat jemand Tipps, wie Sie vorgehen sollen oder wie Sie das neue Profil-Objekt übergeben können?

Antwort

1

Warum fügen Sie ein Profile.new die User ‚s profile Attribut (das resource Modell unter der Annahme ist ein User)

Angenommen, Sie Profile pro User nur eine haben:

resource.profile = Profile.new 
resource.save # you need to save the resource as well 
super(resource) 

... ist das, was Sie wollen.

Wie jedoch von Sylvain wies darauf hin, wollen Sie tatsächlich diese aus dem selbst User Modell zu handhaben, mit dem after_create Filter: befestigen Sie das Profil, sobald der Benutzer erstellt wird. Keine Notwendigkeit, Controller-Code zu ändern.

1

Sie könnten versuchen, eine Methode im Benutzermodell

after_create :create_profile 

private 
def create_profile 
     self.profiles.build(#something) 
     #according there is a link between your profiles object and user 
end 

Hoffnung hinzuzufügen, das hilft

Verwandte Themen