[RAILS] [Nachdem ich Progate gelernt hatte] Ich habe versucht, form_with beim Vergleich mit form_tag zusammenzufassen

Viele Leute werden ihr Lernen von Progate auf Rails-Tutorials verlagern.

Formbezogen ist selbst in Progate schwierig. Es ist wirklich schwierig, sich mit dem Formular zu registrieren oder anzumelden.

Progate ist jedoch immer noch leicht verständlich geschrieben.

Erstellen Sie ein Formular mit form_tag, senden Sie Daten mit und empfangen Sie die Daten mit Parametern. Sehr leicht zu verstehen.

Als ich jedoch anfing, Rails ernsthaft zu lernen, hörte ich auf, form_tag zu verwenden und form_with zu verwenden. In diesem Bereich nimmt die Anzahl der Rails-Beschreibungen stark ab. Der Grad des Verständnisses wird ebenfalls drastisch reduziert.

Dieser Artikel richtet sich an Personen, die einer Lernroute wie dem Rails-Tutorial von Progate folgen und form_with einfach nicht verstehen können.

Ich werde schreiben, während ich vergleiche, wie man Progate schreibt und wie man Rails schreibt.

Zusammenfassend denke ich, dass der Schreibstil von Progate auf einen "konsistenten Schreibstil" für Anfänger abzielt. Ursprünglich wird bei einer Änderung in der Datenbank form_tag nicht verwendet. Verwenden Sie form_for.

Progate verwendet den form_tag-Helfer und die Eingabe-Tags, um ein handgemachtes Gefühl zu erzeugen.

Wenn Sie es mit `` `form_tag``` implementieren, das häufig in Progate verwendet wird, ist es sehr handgemacht.

Was den Fluss betrifft,

  1. Senden Sie Daten mit form_tag und input tag an den Controller.
  2. Empfangen Sie Daten mit der Aktion "Erstellen"
  3. Speichern und in die Datenbank schreiben
<%= form_tag("/users/create") do %>
  <p>Nutzername</p>
    <input name="name" value="<%= @user.name %>">
  <p>Mail Adresse</p>
    <input name="email" value="<%= @user.email %>">
    <input type="submit" value="Anmelden">
 <% end %>

Legen Sie den Pfad mit form_tag fest. Legen Sie den Pfad zu / users / create fest. Zu diesem Zeitpunkt im Routing (route.rb),

Das steht geschrieben, nicht wahr? Daher wird die Erstellungsaktion in users_controller.rb ausgelöst. Der Inhalt der Erstellungsaktion lautet wie folgt.

  def create
    @user = User.new(name: params[:name], email: params[:email])
    if @user.save
      flash[:notice] = "Die Benutzerregistrierung ist abgeschlossen"
      redirect_to("/users/#{@user.id}")
    else
      render("users/new")
    end
  end

Es sieht aus wie das.

Der Fluss ist leicht zu erfassen, nicht wahr? Ich erhalte das, was ich aus dem Formular gesendet habe, als Parameter und speichere es mit @ user.save, damit ich jedes logisch verstehen kann.

Wenn Sie von hier aus mit dem Rails-Tutorial fortfahren, verwenden Sie form_tag nicht mehr.

Dies liegt daran, dass die Art und Weise, wie Progate geschrieben wird, außergewöhnlich ist.

Verwenden Sie form_for, wenn die Datenbank betroffen ist

Ich benutze kein Progate. form_tag wird nicht verwendet, wenn Sie sich neu in der Datenbank registrieren, bearbeiten oder löschen.

Verwenden Sie beim Bearbeiten der Datenbank form_for.

Nehmen Sie als Modell ein Modellobjekt (ein Objekt (eine Instanz), das basierend auf dem Benutzermodell erstellt wurde, z. B. @ user = User.new).

Zum Zeitpunkt von form_tag war es mühsam, ID-Informationen von: id abzurufen, den Datensatz aus der Datenbank zu finden und diese Informationen zu bearbeiten.

Es gab einen solchen Prozess.

Das Tolle an Rails ist jedoch, dass @user auch automatisch eine Benutzer-ID hat.

Rails ist also stark schwarzboxig

Geben Sie das Ziel mit form_tag an.

Sie haben form_tag verwendet, wenn Sie formularbezogene Helfer in Ruby on Rails in Progate verwendet haben.

Zu dieser Zeit blieb ich in der Unterlassung stecken. Progate schreibt sowieso alles. Bilden

Was ist form_with?

form_with ist eine Kombination aus form_tag und form_for. form_tag hat den Pfad angegeben. form_for hat ein Modellobjekt angegeben (eine aus einem Modell erstellte Instanz).

Es ist "form_with", dass Sie beide verwenden können.

form_tag

<%= form_tag 'Pfad' do %>
  <Eingabe ...
  <Eingabe ...
<% end %>

Im Gegensatz zum Schreiben

form_for ist

<%= form_for(@user) do |f| %>
  <%= f.text_field :name %>
  <%= f.submit %>
<% end %>

Wie Sie sehen, ist es ärgerlich, anders zu schreiben, obwohl das Formular ähnlich ist. Indem alle form_with erstellt und versucht wurde, den Schreibstil zu vereinheitlichen, wurde er eins.

Diejenigen, die Progate gelernt haben, haben jedoch form_tag gelernt

"Was? Ist es ein Modell als Argument der Form?"

Ich bin verwirrt. Wir haben die Aktion festgelegt und sind gekommen.

Das Tolle daran ist, dass form_with model: @ user und model egoistisch sind.

Wenn Sie dies mit form_tag tun, haben Sie die Aktion angegeben.

<% = form_tag (" / users / create ") do%> Dies ist der Teil. Die Erstellungsaktion wird angegeben.

Beim Schreiben des Modells: @user,

Wenn Sie sich als neuer Benutzer registrieren, Es wird eine neue Aktion aufgerufen

Auf diese Weise wird die Aktion geändert, die mit Vorsicht aufgerufen werden soll. Rails bietet viele Funktionen, mit denen Sie Zeit und Mühe sparen.

Zunächst erhalten Sie: ID-Informationen von der URL. Identifizieren Sie dann den Benutzer anhand der ID-Informationen

Dies: Das gesamte Abrufen der ID ist nicht erforderlich. Tatsächlich erledigt Rails alles automatisch. Progate hat jedoch beim ersten Lernen alles übersprungen.

"Ich bin nicht sicher, aber Rails wird alles tun."

Es ist schwer zu verstehen, deshalb erklärt er es gut.

Zusammenfassung

-Form_tag wird verwendet, wenn keine Änderung in der Datenbank vorliegt ・ Form_for wird beim Erstellen eines Formulars verwendet, bei dem die Datenbank aktualisiert wird. ・ Form_with kann beide Rollen spielen

Rails ist sehr aufmerksam. Es wird verschiedene Dinge ohne Erlaubnis tun.

"Ich habe es endlich getan, ohne es zu erfahren."

Ich werde sagen. Aber am Anfang

"Warum hast du das entschieden?"

Sie fragen sich vielleicht. Ich bin immer noch verwirrt von Rails Witz.

Ich glaube jedoch nicht, dass es etwas Bequemeres und Zuverlässigeres gibt, wenn Sie es beherrschen können. Lassen Sie uns unser Bestes geben, damit wir es meistern können.

Recommended Posts

[Nachdem ich Progate gelernt hatte] Ich habe versucht, form_with beim Vergleich mit form_tag zusammenzufassen
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Ich habe versucht, die Unterstützung für iOS 14 zusammenzufassen
Ich habe versucht, mit Java zu interagieren
Ich habe jetzt versucht, Java 8 zusammenzufassen
Nachdem ich Progate gelernt hatte, versuchte ich, eine SNS-Anwendung mit Rails in der lokalen Umgebung zu erstellen
Ich habe versucht, die verwendeten Methoden zusammenzufassen
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Ich habe versucht, mit Web Assembly zu beginnen
Ich habe mit Studyplus zeitsparendes Management-Lernen versucht.
Ich habe versucht, die Stream-API zusammenzufassen
Was ist Docker? Ich habe versucht zusammenzufassen
Ich habe versucht, über JVM / Garbage Collection zusammenzufassen
Ich habe versucht, AdoptOpenJDK 11 (11.0.2) mit dem Docker-Image zu überprüfen
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 3 ~ Übung ~ erstellt
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Ich habe versucht, die Federbeinkonfiguration mit Coggle zu verwalten
Ich habe versucht, Anmeldeinformationen mit JMX zu verwalten
Ich habe versucht, den Block mit Java zu brechen (1)
Ich habe versucht, was ich mit Stream leise versuchen wollte.
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben
[Java 11] Ich habe versucht, Java auszuführen, ohne mit Javac zu kompilieren
Ich habe MySQL 5.7 mit Docker-Compose gestartet und versucht, eine Verbindung herzustellen
Ich habe versucht, mit Spring Data JPA zu beginnen
[Maschinelles Lernen] Ich habe die Objekterkennung mit Create ML [Objekterkennung] ausprobiert.
Ich habe versucht, verschiedene link_to zusammenzufassen, die dieses Mal verwendet wurden
Ich habe versucht, Animationen mit der Blazor + Canvas-API zu zeichnen
Ich habe versucht, Sterling Sort mit Java Collector zu implementieren
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit spiritueller Technik zu erhöhen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe die grundlegende Grammatik von Ruby kurz zusammengefasst
Ich habe versucht, den Chat mit dem Minecraft-Server mit der Discord-API zu verknüpfen
Ich habe versucht, persönlich nützliche Apps und Entwicklungstools (Apps) zusammenzufassen.
Ich habe versucht, mit Docker eine Padrino-Entwicklungsumgebung zu erstellen
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
Ich habe versucht, die Objektorientierung auf meine Weise zusammenzufassen.
Ich habe versucht, mit Ractor mehrere Objekte übergeben zu können
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
Ich habe eine App für maschinelles Lernen mit Dash (+ Docker) Teil 2 ~ Grundlegende Schreibweise für Dash ~ erstellt
Ich habe DI mit Ruby versucht
Ich habe UPSERT mit PostgreSQL ausprobiert.
Ich habe BIND mit Docker ausprobiert
Ich habe versucht, yum-cron zu verifizieren
Ich habe versucht, das Problem der "mehrstufigen Auswahl" mit Ruby zu lösen
Ich habe versucht zusammenzufassen, was bei der Site-Java-Ausgabe gefragt wurde.
Ich habe versucht, mit Docker eine Plant UML Server-Umgebung zu erstellen
Ich habe versucht, mithilfe von JDBC Template mit Spring MVC eine Verbindung zu MySQL herzustellen
[Rubiy] Heute Abend habe ich versucht, die Schleifenverarbeitung zusammenzufassen [Zeiten, Pause ...]