[RUBY] [Rails] Ich habe den Unterschied zwischen neuer Methode, Speichermethode, Erstellungsmethode und Erstellungsmethode untersucht.

Ich bin ein Anfänger mit "super", der jeden Tag mit Rails zu kämpfen hat. Teilen Sie für die Organisation Ihres eigenen Wissens.

Gibt es nicht viele Methoden zum Erstellen von Objekten?

Ich habe diese Tatsache nicht bemerkt, als ich den Text gescannt habe, aber neulich "Oh, wenn Sie denken, dass es eine neue Methode ist, verwenden Sie hier die Methode create ... Wenn du darüber nachdenkst, könnte es einen Build geben ... Was ?! " Ich war in einem solchen Zustand und beschloss, es selbst zu untersuchen. Es ist ein kurzer Artikel, aber bitte bleib bis zum Ende bei mir. image.png

Über neue Methode & Speichermethode

Beginnen wir zunächst mit der grundlegenden Verwendung der neuen Methode. Übrigens schreibe ich unter der Annahme, dass ich mit dem Buchmodell posten werde.

ruby:books_controller:rb


def new
  @book = Book.new
end

Book.new erstellt eine leere Instanz der Book-Klasse und weist sie der Instanzvariablen @book zu. "Jeder weiß das" Früher habe ich das gedacht, aber es gab eine Möglichkeit, das Argument mit der neuen Methode anzugeben. Hier ist es

ruby:books_controller:rb


def new
  @book = Book.new(title: "Rashomon", author:"Ryunosuke Akutagawa")
#Der Titel ist "Rashomon" und der Autor ist "Ryunosuke Akutagawa".
end

Wenn Sie ein neues Buch damit veröffentlichen, können Sie sich unabhängig von den Zeichen, die Sie in das Eingabefeld eingeben, nur bei Rashomon registrieren (lacht). Die neue Methode hat nicht nur eine leere Instanz übergeben. Es tut mir leid für diejenigen, die es wussten.

Verwenden Sie nach der neuen Methode die Speichermethode in der Erstellungsaktion, um die Daten zu speichern. Hier ist es

ruby:books_controller:rb


def create
  @book = Book.new(book_params)
  @book.save
end

Endlich konnte ich mich neu in der Buchdatenbank registrieren. Bei der Speichermethode kann diese zusammen mit der neuen Methode in der Datenbank gespeichert werden.

Informationen zur Methode create

Hier kommt die gemunkelte Erstellungsmethode ins Spiel. Die mit der oben beschriebenen neuen Methode und Speichermethode gespeicherten Schritte können mit der Methode create in nur einer Zeile ausgeführt werden.

Was bedeutet das?

ruby:books_controller:rb


def create
  Book.create(title: "Rashomon", author:"Ryunosuke Akutagawa")
end

Allein damit konnte ich es in der Datenbank speichern. Sie können nicht nur die Daten speichern, sondern gleichzeitig auch das Modell instanziieren. Mecha einfach. Einfach.

Grundlegende Syntax


Modellname.create(Spaltenname: "Wert")

Auch hier ist die Methode create eine Methode, die gleichzeitig neu ausgeführt und gespeichert wird.

Warum dann nicht einfach die Methode create verwenden? Es scheint, dass eine flache Idee auftauchen wird, aber es ist nicht so süß.

Wie man richtig benutzt

Wenn Sie etwas mit der erstellten Instanz tun möchten, können Sie die Methode create nicht verwenden. Daher müssen Sie eine neue Methode und eine Speichermethode schreiben. Speziell

  1. Wenn Sie mit if einen bedingten Zweig erstellen möchten
  2. Wenn Sie mit render eine Fehlermeldung ausgeben möchten Und so weiter, was weiter unten erklärt wird.

❶ Bedingte Verzweigung mit if

users_controller.rb


def create
  @user = User.new(user_params) #Instanzvariable erstellen
  if @user.save
    redirect_to @user, notice: 'Benutzererstellung abgeschlossen'
  else
    render :new #Das Ziel beim Speichern konnte nicht gerendert werden
  end
end

Auf diese Weise sollten die neue Methode und die Speichermethode verwendet werden, wenn eine bedingte Verzweigung auftritt, z. B. die Verwendung von Instanzvariablen zur Aufteilung in Erfolgsmuster und Fehlermuster.

❷ Ich möchte beim Rendern eine Fehlermeldung ausgeben

Auf dem Bildschirm zum Erstellen eines neuen Beitrags (neue Aktion) funktioniert beispielsweise die Validierungsprüfung, und der Beitrag kann nicht erstellt werden. Wenn zu diesem Zeitpunkt eine Fehlermeldung über der Post-Spalte angezeigt wird, ist dies sehr leicht zu verstehen. Ich werde im Detail erklären.

ruby:books_controller:rb


def new
  @book = Book.new
end

def create
  @book = Book.new(params[:id])
  if  @book.save
      redirect_to book_path(@book.id)
  else
      render 'layouts/errors'
  end
end

ruby:views/books/new.html.erb


<h1>New Book</h1>
<%= render 'layouts/errors', obj: @book %>
#Kürzung

ruby:layouts/_errors.html.erb


<% if obj.errors.any? %>  #Zu obj@Ersatzbuch
  <div id="error_explanation">
    <h3><%= pluralize(obj.errors.count, "error") %> prohibited this obj from being saved:</h3>

    <ul>
    <% obj.errors.full_messages.each do |message| %>
      <li><%= message %></li>
    <% end %>
    </ul>
  </div>
<% end %>

Wie oben erwähnt, ist es selbst mit der Methode create nicht möglich, eine Instanzvariable zu verwenden, die eine neue Methode zum Ausgeben einer Fehlermeldung enthält. Ich muss oft darüber nachdenken ...

Informationen zur Erstellungsmethode

Es ist endlich die letzte Methode. Ich denke jedoch, dass es am wenigsten wichtig ist. In den aktuellen Schienen funktionieren die neuen und Build-Methoden fast gleich. In älteren Versionen von Rails bestand der Unterschied darin, ob beim Herstellen der Zuordnung automatisch ein externer Schlüssel hinzugefügt wurde oder nicht. Jetzt werden sowohl die neue Methode als auch die Erstellungsmethode mit einem externen Schlüssel festgelegt. Abhängig vom Arbeitsplatz gibt es Fälle, in denen das Erstellen in bestimmten Situationen empfohlen wird. Wenn dies nicht der Fall ist, ist es kein Problem, es zu einer neuen Methode zu vereinheitlichen.

abschließend

Auch diesmal habe ich viel gelernt. Je tiefer Sie graben, desto mehr werden Sie neue Dinge entdecken, auch wenn Sie denken: "Ich weiß das." Ich werde mich weiterhin dem Studium widmen.

Recommended Posts

[Rails] Ich habe den Unterschied zwischen neuer Methode, Speichermethode, Erstellungsmethode und Erstellungsmethode untersucht.
[Schienen] Unterschied zwischen Erstellungsmethode und neuer + Speichermethode
[Rails / Active Record] Über den Unterschied zwischen create und create!
[Rails] Ich habe den Unterschied zwischen Ressourcen und Ressourcen untersucht
Unterschied zwischen i ++ und ++ i
[Ruby] Ich habe über den Unterschied zwischen each_with_index und each.with_index nachgedacht
Unterschied zwischen neu und in Rais Action Controller erstellen
[Rails] Was ist der Unterschied zwischen Bundle-Installation und Bundle-Update?
Was ist der Unterschied zwischen einer Aktion und einer Instanzmethode?
Überschreiben wir den Unterschied zwischen == (Identität) und der Methode equals (Äquivalenz).
Unterschied zwischen Instanzmethode und Klassenmethode
Unterschied zwischen == Operator und Methode gleich
Unterschied zwischen dem Operator == und der Methode eqals
[Rails] Unterschied zwischen find und find_by
Jetzt im dritten Jahr ist das Missverständnis, das ich bemerkt habe, der Unterschied zwischen der Gleichheitsmethode und ==
[Rails] Unterschied zwischen redirect_to und Rendern
Der Unterschied zwischen der Ruby-Instanzmethode und der Klassenmethode ist leicht zu verstehen.
Über den Unterschied zwischen irb und pry
Ich habe das Zustandsmuster und das Strategiemuster studiert
[Rails] Unterschied zwischen redirect_to und render [Anfänger]
[Java] Verstehe den Unterschied zwischen List und Set
[iOS] Verstehe den Unterschied zwischen Frame und Grenzen
Verstehe den Unterschied zwischen abstrakten Klassen und Schnittstellen!
Was ist der Unterschied zwischen SimpleDateFormat und DateTimeFormatter? ??
Unterschied zwischen Mitglied und Sammlung von Schienen route.rb
Ich habe die Version und die Schienen neu angegeben, aber aus irgendeinem Grund ist die neueste Version enthalten ~
Was ist der Unterschied zwischen Systemspezifikation und Funktionsspezifikation?
So senden Sie Ethereum-Transaktionen Unterschied zwischen send und sendAsync
Unterschiede zwischen Klassen und Instanzen in Ruby
Vergleichen Sie den Unterschied zwischen Docker-Datei vor und nach Docker-Slim
[JAVA] Was ist der Unterschied zwischen Schnittstelle und Zusammenfassung? ?? ??
Was ist der Unterschied zwischen Überspringen und Ausstehend? [RSpec]
[Swift] UITextField hat mir den Unterschied zwischen Null und "" beigebracht.
[Java-Anfänger] Unterschied zwischen Länge und Länge () ~ Ich weiß nicht ~
Unterschied zwischen vh und%
[Rails] Ich möchte mich nicht mehr verlaufen. Erstellen Sie neue Modelle, Tabellen, Controller und Ansichten.
Ich werde den Unterschied zwischen der Entwicklung von Android-Anwendungen und der Entwicklung von iOS-Anwendungen aus der Sicht von iOS-Ingenieuren erläutern
Ich habe versucht, Methoden mit ähnlichen Funktionen für den Unterschied zwischen Java-Array und ArrayList zu vergleichen und ihnen zu entsprechen.
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
[Java] Überprüfen Sie den Unterschied zwischen orElse und orElseGet mit IntStream
Der Unterschied zwischen der Programmierung mit Ruby-Klassen und der Programmierung ohne Ruby-Klassen
Unterschied zwischen Produkt und Variante
Unterschied zwischen redirect_to und render
[Java] Unterschied zwischen == und gleich