Ich habe etwas ziemlich merkwürdiges beim Versuch, ein Bild über die Büroklammer Edelstein für mein Benutzermodell (unter dem Avatar-Attribut) hochladen hochgeladen. Aus irgendeinem Grund verhalten sich User.update und @ user.update_attributes anders. Weiß jemand, warum das so ist?Rails Paperclip: update vs. update_attributes
#using @user.update_attributes(user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
@user.update_attributes(user_avatar_params)
puts @user.avatar_file_name.nil? # prints false as expected
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
#using User.update(@user.id, user_avatar_params)
def update_profile_pic
@user = User.find(params[:id])
User.update(@user.id, user_avatar_params)
puts @user.avatar_file_name.nil? # prints true although successfully saves
respond_to do |format|
format.html { redirect_to :back }
format.js
end
end
Und hier ist mein starkes params in den user_controller.rb
def user_avatar_params
params.require(:user).permit(:avatar)
end
UPDATE
So nach dem Empfang prompt und genial Antworten das ist, was ich gelernt habe:
User.update
Gibt das Ergebnisobjekt zurück, ob es erfolgreich in der Datenbank gespeichert wurde oder nicht. Daher aktualisiert die @ user-Variable nicht, wenn Sie die Zuweisung nicht vornehmen. @user.update_attributes(user_avatar_params)
ändert implizit die Variable @user.
Die Lösung für diese mit der Update-Methode zu arbeiten, ist @user = User.update(@user.id, user_avatar_params)
Als Affinitäten erwähnt User.update gibt das Objekt basierend auf dem Datensatz es aktualisiert. Es ist also grundsätzlich nicht dasselbe Objekt im Speicher, auf das der Benutzer var zeigt. Versuchen Sie: user = User.update (user.id, user_avatar_params) und ich glaube, dass Sie in beiden Fällen die gleichen Ergebnisse erhalten werden. BTW, ich denke, erwarteter Wert in 'user.avatar_file_name.nil?' sollte falsch sein, nicht wahr –
Danke für den Fang @RoaringStones. Ich habe den Beitrag korrigiert. Ja, wenn ich '' '@user = User.update (user.id, user_avatar_params)' '' verwende, wird falsch wie erwartet ausgegeben. –