Ich möchte Devise's RegistrationsContollers
'Aktion erstellen, so dass wenn ein Benutzer sich anmeldet, kann ich ein UserProfile
Modell mit diesem Benutzer verknüpfen.Wie füge ich ein Benutzerprofil zu einem Benutzer hinzu, wenn sich der Benutzer anmeldet? (Devise, Rails 3)
So, nach den Richtlinien in der Devise Readme, überschreiben ich die Aktion:
#File app/controllers/registrations_controller.rb:
class Users::RegistrationsController < Devise::RegistrationsController
def create
# some code here..
self.user_profiles.build #Error (no method `user_profiles`)
current_user.user_profiles.build #Error (current_user is nil)
some other way???
end
end
#File routes.rb:
devise_for :users, :controllers => { :registrations => 'users/registrations' }
Devise einen Datensatz in der users
Tabelle erstellt, aber wie verknüpfe ich eine UserProfile
mit diesem Eintrag?
Ich habe versucht zu googeln, aber ich kann einfach nicht zur Arbeit kommen! Jede Hilfe wird sehr geschätzt.
(Ich verwende jetzt Devise 1.1.5 on Rails 3.0.3)
GELÖST:
Lösung Hinzufügen zum Nutzen anderer:
#File app/controllers/registrations_controller.rb:
class Users::RegistrationsController < Devise::RegistrationsController
def create
super
@user.build_user_profile
@user.user_profile.some_data = 'abcd'
@user.save!
end
end
Danke! das funktioniert (@ user.build_user_profile). Außerdem muss ich das Profil im Controller erstellen (nicht im Modell), da einige Eingaben vom Benutzer zur Anmeldezeit (z. B. Adresse) benötigt werden. – Zabba
Wenn Sie Daten von einem anderen Modell, in diesem Fall dem UserProfile, übergeben, können Sie mit ': access_nested_attributes_for' im Benutzermodell und' fields_for' im Anmeldeformular auf diese Weise alles tun Sie benötigen auf der Modellebene tatsächlich die Möglichkeit, das zugehörige Modell implizit zu erstellen, ohne eine Codezeile schreiben zu müssen. – scaney
Danke nochmal! Werde das untersuchen – Zabba