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.
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.
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.
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üß.
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
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.
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 ...
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.
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