Schienen update_attributes gibt false zurück, wenn Sie versuchen zu aktualisieren db-Werte
in der Hoffnung, jemand hier kann mich in die richtige Richtung.
Ich habe ein controller-Update def laufen "update_attributes". Derzeit gibt false zurück, ohne Fehlermeldung. Ich bin ziemlich neu in Ruby, aber nicht zu codieren, und dies hat mich ratlos für ein paar Tage! Ich versuche dem model User und db aktualisiert mit den Werten unten angegeben.
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
meinem edit def....
def edit
@user = current_user
end
Das Formular sendet die folgenden, um dieses update-Methode:
--- !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'
And params[:user] zurück:
{"first_name"=>"Amanda", "last_name"=>"Ross", "is_owner"=>"1", "email"=>"[email protected]"}
Alle diese Felder sind in attr_accessible in das Modell, und kann ich einen Benutzer erstellen, ohne jedes problem.
hier die Entwicklung.log-Ausgabe (sorry, es ist etwas chaotisch)....
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)
Könnte evtl jemand helfen Punkt, wo ich bin, was falsch läuft, bitte?
Vielen Dank im Voraus!
InformationsquelleAutor der Frage steve | 2012-04-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beide
#update_attributes
und#save
wird zunächst prüfen, ob Ihre model-Instanz ist#valid?
bevor er in die Datenbank schreiben. Wenn Ihr Modell-Instanz nicht#valid?
dann sind diese Methoden den Wert false zurück. Um zu sehen, was falsch mit Ihrem model-Instanz, werfen Sie einen Blick auf Ihr Modell ist#errors
.Oder eingebettet in Ihre Methode,
InformationsquelleAutor der Antwort yfeldblum
Können Sie auch besser Introspektion beim aktualisieren der Attribute durch Aufruf
update_attributes!
statt, was Anlass zu Ausnahmen, anstatt einfach nur false zurückgeben.InformationsquelleAutor der Antwort Galen