2010-05-24 3 views
2

J'ai une méthode de mise à jour dans mon contrôleur utilisateurs que j'appelle d'un HTTPService dans Flex 4. La méthode de mise à jour est la suivante:Problème de mise à jour d'un champ de base de données de mon contrôleur

def updateName 
    @user = User.find_by_email(params[:email]) 
    @user.name = params[:nameNew] 
    render :nothing => true 
    end 

Ceci est sortie de la console:

traitement UsersController # updateName (pour 127.0.0.1 à 2010-05-24 14:12:49) [POST]

Paramètres: { "action" => "updateName", "nameNew" => "ben", "contrôleur" => "utilisateurs", "email" => "[email protected]"}

SELECT * FROM charge de l'utilisateur (0,6 ms) « utilisateurs "WHERE (" users "." Email "= '[email protected]') LIMITE 1 Achevé en 20ms (Vue: 1, DB: 1) | 200 OK [http://localhost/users/updateName]

Mais quand je vérifie ma base de données, le champ de nom est jamais mis à jour. Qu'est-ce que je fais mal? Merci d'avoir lu.

Répondre

4

Vous seul objet utilisateur modifié dans la mémoire, à savoir que vous ne sauvegardez pas la modification de la base de données. Vous voulez quelque chose comme:

def updateName 
    @user = User.find_by_email(params[:email]) 
    @user.name = params[:nameNew] 
    @user.save 
    render :nothing => true 
end 

De plus, vous voudrez peut-être mettre @ user.save dans une si condition pour vérifier si le modèle a été correctement enregistré.

+1

vous pouvez également utiliser '@ user.update_attribute (: name, params [: nameNew])' qui met à jour l'attribut et enregistre l'enregistrement immédiatement. Particulièrement utile dans un cas comme celui-ci :) – nathanvda

2

Vous devez appeler la méthode de mise à jour de votre modèle après avoir mis à jour les champs

@user.update() 
Questions connexes