2009-11-11 3 views
0

Je suis vraiment nouveau chez Ruby On Rails et je travaille avec un baseApp qui est livré avec les fonctionnalités de connexion et d'enregistrement des utilisateurs. Il crée également un profil vide pour un utilisateur lors de son inscription.Enregistrer les champs d'un autre modèle d'une certaine vue

Ensuite, j'ai créé une migration pour ajouter des champs à la table des profils, comme prenom, le sexe, état, pays, etc.

Ce que je voudrais faire, est de montrer les champs à le formulaire d'enregistrement, puis enregistrez-les sur la table des profils. Comment puis-je faire ceci?

Merci,

Brian

Répondre

0

accepts_nested_attributes_for fournit tout ce dont vous avez besoin.

Tant que vous avez demandé à votre utilisateur d'avoir un profil, vous êtes presque prêt à partir.

Ajoutez accepts_nested_attributes_for :profile au modèle User. Configurez ensuite votre formulaire comme suit:

<% form_for :user do |f| %> 
    ... 
    User model fields 
    ... 
    <% @user.build_profile if @user.profile.nil? %> 
    <% f.fields_for :profile do |p| %> 
    <%= p.label :first_name %> 
    <%= p.text_field :first_name %> 
    ... 
    Profile model fields 
    ... 
    <% end %> 
<% end %> 

Le contrôleur n'a pas besoin d'être modifié.

Pour plus de détails, consultez la section sur les formulaires imbriqués de FormHelper.

+0

Merci pour la réponse. Quand j'ajoute le <% @% user.profile.build> ligne il me jette l'exception suivante: « ! Vous avez un objet nul quand on ne s'y attendait pas L'erreur est survenue lors de l'évaluation nil.build » J'ai déjà ajouté la ligne accepts_nested_attributes_for: profile au modèle User, mais je ne sais pas ce qui se passe. –

+0

Désolé, cela aurait dû être build_profile, corrigé maintenant. – EmFi

+0

Donc, devrait-il être <% @ user.profile.build_profile%>? Ne fonctionne pas non plus. Peut-être qu'il me manque quelque chose d'autre. –

Questions connexes