[RUBY] Über redirect_to in form_with

zunaechst

Als ich mit dem Code spielte, um das Portfolio zu verbessern, fand ich eine Beschreibung, die immer noch form_for verwendet. Umgeschrieben in form_with, eine einfache Idee. .. ..

Entwicklungsumgebung

ruby 2.5.1p57 rails (6.0.3.1)

Was ist passiert

Image from Gyazo

Erstellen Sie ein einfaches Eingabeformular und klicken Sie auf Erstellen, um Informationen zu registrieren

Im Fall von ** form_for ** implementieren Sie mit der folgenden Beschreibung

= form_for @target do |f|
Kürzung
  = f.submit "Create"

Schreiben Sie dies neu und ändern Sie es mit der folgenden Beschreibung in ** form_with **

= form_with model: @target do |form|
Kürzung
  = f.submit "Create"

jedoch

Es mag für Leute, die an das Schreiben gewöhnt sind, natürlich sein, aber der Seitenübergang (redirect_to) beim Drücken von "Senden" funktioniert nicht. Die Daten werden gespeichert, aber derselbe Inhalt wird weitergegeben, da Sie mehrmals auf Erstellen klicken können. Prozess der Erstellung


  def create
    @target = Target.new(target_params)
    if @target.save
      redirect_to root_path
    else
      render :new
    end
  end

Ursachenforschung

Binding.pry → Es wurde vorerst gestoppt, sodass es normal funktioniert. save


  def create
    @target = Target.new(target_params)
    if @target.save
      binding.pry
      redirect_to root_path
    else
      render :new
    end
  end

Muster 2, binding.pry → Es wurde gestoppt, sollte aber nicht gestoppt werden, wenn redirect_to funktioniert. Ich denke redirect_to funktioniert nicht.


  def create
    @target = Target.new(target_params)
    if @target.save
      redirect_to root_path
      binding.pry
    else
      render :new
    end
  end

Alles was Sie tun müssen, ist auf Google zu suchen.

Ergebnis

Verursacht durch fehlende Option in form_with. Das Folgende ist eine Beschreibung, damit es funktioniert.

= form_with model: @target, local: true do |form|
Kürzung
  = f.submit "Create"

Die Ursache ist, dass form_with ein Formular über Ajax-Kommunikation sendet. Wenn Sie ein Formular mit diesem Ajax senden, sind Turbolinks am Verhalten von redirect_to beteiligt, das vom Zielcontroller ausgeführt wird. Und es scheint, dass es nicht funktioniert hat, weil ich keine Turbolinks gesetzt habe.

Es gibt zwei Lösungen, und ich habe local hinzugefügt: true, um die Ajax-Kommunikation zu trennen, indem entweder Turbolinks eingeführt oder die Ajax-Kommunikation getrennt wird.

Am Ende

Der Inhalt war, dass ich das Gefühl hatte, es in der Schule gelernt zu haben, aber als ich es erlebte, vergaß ich es. .. .. Da ich zum ersten Mal einen Artikel veröffentliche, würde ich mich freuen, wenn Sie mich wissen lassen könnten, ob Verstöße gegen Manieren, Fehlinterpretationen oder Verbesserungen vorliegen.

Vielen Dank.

Recommended Posts

Über redirect_to in form_with
[Rails] Über local: true, beschrieben in form_with
Informationen zum Formular. ○○ von form_with
Informationen zu Validierungsmethoden in JUnit
Über reguläre Ausdrücke in Ruby
Über Java Abstract Class
Über häufig verwendete Methoden in der Entwicklung
Über das Symbol <%%> in Rails erb
[Super Einführung] Über Symbole in Ruby
[Rails] Über die Hilfsmethode form_with [Basic]
Über =
Informationen zur Dateikopierverarbeitung in Java
Informationen zum Zurückgeben einer Referenz in einem Java Getter
[Erstellen] Ein Memorandum über das Codieren in Java
Informationen zu Datensätzen, die zur Vorschau in Java JDK 14 hinzugefügt wurden
Android Asynchrone UI-Thread-Verarbeitung
Fortsetzung Sprechen Sie über das Schreiben von Java mit Emacs @ 2018
Über den Stream Debugger des IntelliJ IDEA Plugins