[RAILS] Beheben Sie ArgumentError in TasksController # update

Erkennen Sie zunächst, dass der Teil von angegeben0 und erwartet1 ein Fehler ohne Anzahl von Argumenten ist.

Danach brauchte ich eine Schlussfolgerung (task_params).

Dann fragte ich mich, was es war und beschloss, einen Blick darauf zu werfen

889bc80b3c184bbcc434429245f79351.png

Überprüfen Sie zuerst, ob es rot markiert ist

Wenn man es betrachtet, ist die 51. Zeile verdächtig. Die 50. Zeile ruft einen bestimmten Datensatz aus der Aufgabentabelle ab und weist ihn @task zu. In Zeile 51 steht eine if-Anweisung, die angibt, ob sie aktualisiert wurde. Achten Sie hier auf @task. Da Update eine Aktion ist, die die aktualisierten Daten ersetzt, wird es auch über das Modell in einer Tabelle gespeichert, sodass Sie etwas benötigen. Dies ist ein wichtiger Parameter, um eine unbeabsichtigte Registrierung / Aktualisierung von Daten zu verhindern. Wo sind die starken Parameter?

Überprüfen Sie die starken Parameter


private
def task_params
  params.require(:task).permit(:content, :point_id).merge(user_id: current_user.id)
end

Es ist bereits privat vorbereitet und wird auch beim Erstellen benötigt. Die hier definierten task_params mussten als Argument übergeben werden. Wenn die Anzahl der Argumente nicht korrekt war, wurde sie daher gescholten und verursachte einen Fehler.

Richtige Antwort

def update
    @task = Task.find(params[:id])
    if @task.update(task_params)← Hier hinzugefügt
      redirect_to root_path
    end

Dadurch konnte der Fehler behoben werden.

Recommended Posts

Beheben Sie ArgumentError in TasksController # update