Je souhaite remplacer l'action RegistrationsContollers
de Devise afin de créer un modèle UserProfile
avec cet utilisateur.Comment ajouter un UserProfile à un utilisateur lorsque l'utilisateur s'inscrit? (Devise, Rails 3)
Ainsi, en suivant les directives du Readme Devise, je remplace l'action:
#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' }
crée un Concevoir enregistrement dans la table users
, mais comment puis-je associer un UserProfile
avec ce dossier?
J'ai essayé la recherche de googles, mais je n'arrive pas à faire marcher ça! Toute aide est très appréciée.
(je suis maintenant en utilisant on Rails 1.1.5 Concevoir 3.0.3)
SOLVED:
Ajout d'une solution pour le bénéfice des autres:
#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
Merci! cela fonctionne (@ user.build_user_profile). De plus, j'ai besoin de créer le profil dans le contrôleur (pas dans le modèle) car certaines entrées de l'utilisateur sont nécessaires au moment de l'inscription (comme l'adresse). – Zabba
Si vous transmettez des données d'un autre modèle, dans ce cas le UserProfile, vous pouvez utiliser ': accepts_nested_attributes_for' dans le modèle User et' fields_for' dans le formulaire d'inscription, de cette façon vous pourrez tout faire En fait, au niveau du modèle, il vous faudrait créer le modèle associé implicitement sans avoir à écrire une ligne de code. – scaney
Merci encore! Regardera dans ce – Zabba