Ich habe ein Benutzermodell mit dem Attribut: Credits. Ich möchte eine einfache Schaltfläche, die den Credits des Benutzers 5 über eine Route mit dem Namen "add" hinzufügt, sodass / users / 3 / add 5 Credits der Benutzer-ID = 3 hinzufügt.
def add
@user = User.find(params[:id])
@user.credits += 5
redirect_to root_path
end
Das ist der relevante Teil meines Controllers. Das Problem ist, dass ich @ user.save nicht aufrufen möchte, da ich einen before_save-Rückruf habe, der das Kennwort des Benutzers basierend auf der aktuellen UTC-Zeit neu verschlüsselt. Ich möchte einfach nur 5 zum Attribut hinzufügen und den Rückruf vermeiden. Ich hätte nie gedacht, dass so eine einfache Sache so schwer sein könnte.
BEARBEITEN:
Ich habe den Rückruf geändert in: before_create, hier ist mein neuer Controller-Code (relevanter Teil):
def add
@user = User.find(params[:id])
@user.add_credits(5)
@user.save
flash[:success] = "Credits added!"
redirect_to root_path
end
und hier ist mein Code im Modell:
def add_credits(num)
self.credits = num
end
EDIT 2:
Ok, es war ein Validierungsproblem, das dazu führte, dass die Änderungen in "EDIT" nicht funktionierten, aber ich würde trotzdem gerne eine Antwort auf die ursprüngliche Frage der Aktualisierung ohne Rückrufe erhalten!