Aktualisieren Sie die Attribute für den Benutzer nur, wenn sich die Attribute geändert haben

Die ursprüngliche, gut funktionierende Version meines Projekts sah folgendermaßen aus:

1) Der Benutzer füllt das Formular aus (neue Aktion) und klickt auf Senden (Aktion erstellen).

2) Der Benutzer wird zu seiner Bearbeitungsseite umgeleitet (die Bearbeitungsaktion verwendet eine vom Modell erstellte Bearbeitungs-ID, nicht die Rails-Auto-Gen-ID), die anzeigt, welche Informationen der Benutzer bereits übermittelt hat

3) Der Benutzer kann die Informationen ändern (Aktion aktualisieren) und erneut senden

In dieser Version wird auf der Seite eine Erfolgswarnung angezeigt, auch wenn der Benutzer nichts an der Bearbeitungsseite ändert und diese übermittelt.

Aus Datenbanksicht ist mir das egal, da das Formular mit den Benutzerinformationen gefüllt ist und die update_attributes-Methode nur alte Informationen mit denselben Informationen überschreibt.

Aus Sicht des Benutzers ist dies jedoch ärgerlich. Daher möchte ich sicherstellen, dass die Informationen nur aktualisiert werden und die Erfolgswarnung nur dann aufleuchtet, wenn der Benutzer tatsächlich etwas ändert.

Ich dachte, das wäre wirklich einfach, indem ich den alten Code wie folgt ändere:

def update
  @request = Request.find_by_edit_id(params[:edit_id])
  if @request.update_attributes(request_params) 
    flash[:success] = true
    redirect_to edit_request_path(@request.edit_id)
  else
    render 'edit'
  end
end

Und fügen Sie dem "if" eine weitere Komponente wie folgt hinzu:

def update
  @request = Request.find_by_edit_id(params[:edit_id])
  if @request.update_attributes(request_params) && @request.changed?
    flash[:success] = true
    redirect_to edit_request_path(@request.edit_id)
  else
    render 'edit'
  end
end

Dies funktioniert jedoch nicht. Wenn ich auf der Bearbeitungsseite keine Informationen ändere und auf "Senden" drücke, passiert nichts (was großartig ist), aber wenn ich Informationen ändere und auf "Senden" drücke, passiert immer noch nichts (was schlecht ist). Was mache ich falsch?

Hinweis: Anfangs dachte ich, es handele sich um einen Fehler in Bezug auf die Reihenfolge der Vorgänge, also habe ich es zu einem verschachtelten if gemacht, mit erstem if @ request.update_attributes und zweitem if @ request.changed, aber dies funktionierte auch nicht ...

Antworten auf die Frage(1)

Ihre Antwort auf die Frage