rails update_attributes renvoie false lors de la tentative de mise à jour des valeurs db
en espérant que quelqu'un ici peut me pointer dans la bonne direction.
J'ai un contrôleur de mise à Jour de def en cours d'exécution "update_attributes". Actuellement, elle retourne false, et aucun message d'erreur. Je suis assez nouveau à Ruby, mais pas pour le codage, ce qui a eu me perplexe pendant quelques jours! Je suis en train d'essayer d'obtenir le modèle de l'Utilisateur de base de données et mis à jour avec les valeurs spécifiées ci-dessous.
def update
#get currently logged in user
@user = current_user
#update user params based on edit form...
if @user.update_attributes(params[:user])
redirect_to profile_path, :notice => "Successfully updated profile."
else
render :action => 'edit'
end
end
mon montage def....
def edit
@user = current_user
end
Le formulaire d'envoie de cette méthode de mise à jour:
--- !ruby/hash:ActiveSupport::HashWithIndifferentAccess
utf8: ✓
_method: put
authenticity_token: 9T4ihVI0p8j7pZEFxof3Bfahi2a+o3BPmtXJDnfHT4o=
user: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
first_name: Amanda
last_name: Ross
is_owner: '1'
email: example@googlemail.com
commit: Update
action: update
controller: users
id: '20'
Et params[:user] retourne:
{"first_name"=>"Amanda", "last_name"=>"Ross", "is_owner"=>"1", "email"=>"[email protected]"}
Tous ces domaines sont en attr_accessible dans le Modèle, et je peux créer un utilisateur sans aucun problème.
voici de développement.journal de sortie (désolé c'est un peu brouillon)....
Started PUT "/users/20" for 127.0.0.1 at 2012-04-17 10:39:29 +0100
Processing by UsersController#update as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"9T4ihVI0p8j7pZEFxof3Bfahi2a+o3BPmtXJDnfHT4o=", "user"=> {"first_name"=>"Amanda", "last_name"=>"Ross", "is_owner"=>"1", "email"=>"[email protected]"}, "commit"=>"Update", "id"=>"20"}
[1m[36mUser Load (1.0ms)[0m [1mSELECT "users".* FROM "users" WHERE "users"."id" = 20 LIMIT 1[0m
>>>>>>>>>>>>
{"first_name"=>"Amanda", "last_name"=>"Ross", "is_owner"=>"1", "email"=>"[email protected]"}
[1m[35m (0.0ms)[0m begin transaction
[1m[36mUser Exists (0.0ms)[0m [1mSELECT 1 FROM "users" WHERE (LOWER("users"."email") = LOWER('[email protected]') AND "users"."id" != 20) LIMIT 1[0m
[1m[35mUser Exists (0.0ms)[0m SELECT 1 FROM "users" WHERE ("users"."email" = '[email protected]' AND "users"."id" != 20) LIMIT 1
[1m[36m (0.0ms)[0m [1mrollback transaction[0m
Rendered users/_form.html.erb (7.0ms)
Rendered users/edit.html.erb within layouts/application (10.0ms)
Rendered layouts/_includes.html.erb (30.0ms)
Quelqu'un pourrait peut-être contribuer point où je vais mal, s'il vous plaît?
Merci d'avance!
source d'informationauteur steve
Vous devez vous connecter pour publier un commentaire.
Les deux
#update_attributes
et#save
va d'abord vérifier si votre modèle d'instance est#valid?
avant de continuer à écrire dans la base de données. Si votre instance du modèle n'est pas#valid?
alors ces méthodes renvoie false. Pour voir quel est le problème avec votre modèle d'exemple, prendre un coup d'oeil à votre modèle#errors
.Ou, intégré dans votre méthode,
Vous pouvez également obtenir une meilleure introspection lors de la mise à jour des attributs en appelant
update_attributes!
au lieu de cela, ce qui soulève des exceptions au lieu de simplement retourner false.