2009-05-20 8 views
0

J'ai une page Ruby on Rails pour modifier un profil d'utilisateur. Le formulaire affiche le nom d'utilisateur et le courrier électronique correctement. Lorsque je change le nom dans la zone de texte et que je clique sur mettre à jour, je me retrouve sur la page edit_profile avec le message "Le profil a été mis à jour avec succès". Le problème est la valeur que j'ai changé le nom pour ne pas enregistrer dans la base de données.problème d'enregistrement de rails forme

Il n'y a aucune erreur et les paramètres dans la sortie du serveur semblent corrects.

traitement UsersController # mise à jour (pour 127.0.0.1 à 2009-05-19 22:00:48) [PUT] Paramètres: { "utilisateur" => { "name" => "nouveau nom" , "email" => "[email protected]"}, "commit" => "Mise à jour", "action" => "update", "_method" => "put", "authenticity_token" = > "59c79fa90aaf5558aaab8cddef6acb7a4c7c55c3", "id" => "1", "contrôleur" => "utilisateurs"}

Qu'est-ce que je manque?

edit_profile.html.erb

<% form_for @profile, :url => {:action => "update", :id => @profile} do |f| %> 
    <%= f.error_messages %> 
    <p>Name: <%= f.text_field :name %></p> 
    <p>Email: <%= f.text_field :email %></p> 
    <%= f.submit "Update" %> 
<% end %> 

users_controller.rb

def edit_profile 
    @profile = User.find(current_user.id) 
    end 

    def update 
    @profile = User.find(params[:id]) 
    respond_to do |format| 
     if @profile.update_attributes(params[:profile]) 
      flash[:notice] = 'Profile was successfully updated.' 
      format.html { render :action => 'edit_profile' }   
     else 
      flash[:notice] = 'Profile Error.' 
      format.html { render :action => "edit_profile" }   
     end 
     end 
    end 

EDIT: Oui c'était était une question de nom, pour résoudre ce problème je l'ai changé ...

if @profile.update_attributes(params[:profile]) 

à

if @profile.update_attributes(params[:user]) 

Répondre

1

Les noms de vos champs ne correspondent pas à ceux que vous transmettez à la méthode update_attributes.

Vérifiez les noms des champs de formulaire (en utilisant Firebug), et sera « nom », etc.

Mais vous passez un tableau appelé « params »:

update_attributes(params[:profile]) 

Vos champs de formulaire devrait être appelé "profile [nom]" pour que cela fonctionne correctement.

Si vous consultez le fichier development.log, vous devriez voir qu'aucune mise à jour n'est jamais appelée.

+0

Oui, vous avez parfaitement raison. Merci Toby. – Mark