Diese Zeit ist eine Fortsetzung des vorherigen Artikels.
Bitte lesen Sie den vorherigen Artikel, wenn Sie möchten.
Lassen Sie uns diesmal etwas über die Validierung lernen.
Erklärung von Ruby on Rails für Anfänger ①
Erklärung von Ruby on Rails für Anfänger ② ~ Erstellen von Links ~
Erklärung von Ruby on Rails für Anfänger ③ ~ Erstellen einer Datenbank ~
Erklärung von Ruby on Rails für Anfänger ④ ~ Verwendung von Namensregeln und form_Tag ~
Erklärung von Ruby on Rails für Anfänger ⑤ ~ Bearbeiten und Löschen der Datenbank ~
Lassen Sie uns einen neuen Controller erstellen.
Dieses Mal erstellen wir einen Posts-Controller, der Posts verwaltet. Führen Sie den folgenden Code im Terminal aus.
rails g controller posts all
Stellen Sie sicher, dass Sie alle Ihre Beiträge in der Datei all.html.erb sehen.
Erstellen Sie dazu eine Datei, die einen neuen Beitrag erstellt. Lassen Sie uns eine new.html.erb-Datei in der Posts-Datei erstellen.
Wir werden neue Beiträge mit dieser Datei new.html.erb erstellen.
Jetzt erstellen wir eine Datenbank zum Verwalten von Posts. Dieses Mal habe ich noch keine Datenbank erstellt, daher werde ich sie aus dem Modell erstellen.
Ein Modell ist ein "Mechanismus zum Bearbeiten von Datenbankinformationen" und kann auch als "Klasse, die mit der Datenbank interagiert" bezeichnet werden.
Modelle werden normalerweise in Singularform benannt, beginnend mit einem unteren Buchstaben. Weil es nur ein Modell für die Tabelle gibt.
rails g model post content: string
Wenn Sie ein solches Modell erstellen, wird gleichzeitig eine Migrationsdatei erstellt, bei der es sich um eine Konstruktionszeichnung der Datenbank handelt.
Lassen Sie uns die Migrationsdatei mit dem folgenden Code ausführen.
rails db:migrate
Lassen Sie uns die erstellte Tabelle in der Datenbankkonsole überprüfen.
rails dbconsole
.table
ar_internal_metadata schema_migrations
posts users
Die Beitragstabelle wurde erstellt. Schauen wir uns den Inhalt mit dem folgenden Code an.
.schema posts
CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "content" varchar, "string" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);
Fügen wir den Code hinzu, um den Beitrag zur Datei new.html.erb zu erstellen.
new.html.erb
<%= form_tag("/posts/create") do %>
<textarea name="content" cols="30" rows="10"></textarea>
<input type="submit" value="Senden">
<% end %>
Ich sende eine Post-Anfrage an die URL "/ posts / create". Die Daten im Textbereich werden in params [: content] gespeichert und gesendet.
Lassen Sie uns wie folgt routen.
routes.rb
post "posts/create" => "posts#create"
Es wird an die Erstellungsaktion des Posts-Controllers weitergeleitet. Um die Textbereichsdaten in der Posts-Tabelle zu speichern, codieren Sie den Posts-Controller wie folgt:
posts_controller.rb
def create
post = Post.new(content: params[:content])
post.save
redirect_to("/posts/new")
end
Sie können die Daten jetzt in der Beitragstabelle speichern.
Füllen Sie den Textbereich wie unten gezeigt aus und klicken Sie auf die Schaltfläche "Senden".
Lassen Sie uns die Datenbank überprüfen. Geben Sie den folgenden Code in das Terminal ein.
rails dbconsole
.header on
select * from posts;
id|content|string|created_at|updated_at 1|pocomaru||2020-05-23 10:37:51.509719|2020-05-23 10:37:51.509719
Auf diese Weise konnten wir den Beitrag in der Datenbank speichern.
Die Validierung ist eine Einschränkung beim Speichern von Daten in der Datenbank.
Wenn Sie sich beispielsweise bei einer Site anmelden, können Sie sich auch dann anmelden, wenn Ihre E-Mail-Adresse und Ihr Passwort leer sind, nicht wahr?
Es existiert, um so etwas zu verhindern.
Die Validierung wird für das Modell festgelegt.
Lassen Sie es uns tatsächlich einstellen.
Ziehen Sie eine Validierung in Betracht, um leere Beiträge zu vermeiden.
Da in der Posts-Tabelle Posts gespeichert sind, erfolgt diese Validierung innerhalb der Post-Klasse des Post-Modells.
Das Post-Modell lautet standardmäßig wie folgt.
post.rb
class Post < ApplicationRecord
end
Die Validierung wird im folgenden Format geschrieben
validiert: Spaltenname, {Validierungsinhalt}
Die Validierung, um leere Beiträge zu verhindern, lautet wie folgt.
post.rb
class Post < ApplicationRecord
end
Die Validierung wird im folgenden Format geschrieben
validiert: Spaltenname, {Validierungsinhalt}
Die Validierung, um leere Beiträge zu verhindern, lautet wie folgt.
post.rb
class Post < ApplicationRecord
validates :content, {presence: true}
end
Dies verhinderte leere Beiträge.
Wenn Sie bei der Validierung nicht weiterkommen, können Sie nicht speichern. Wenn das Speichern erfolgreich ist, wird True als Rückgabewert zurückgegeben. Wenn das Speichern nicht erfolgreich ist, wird False als Rückgabewert zurückgegeben.
Schreiben wir den Posts-Controller wie folgt um.
posts_controller.rb
def create
post = Post.new(content: params[:content])
if post.save
redirect_to("/posts/all")
else
redirect_to("/posts/new")
end
Wenn Sie den Code auf diese Weise neu schreiben, wird er bei erfolgreichem Speichern zu "/ posts / all" und bei fehlgeschlagenem Speichern zu "/ posts / new" umgeleitet.
Sie haben jetzt eine Validierung erstellt, die leere Beiträge beseitigt.
Als Nächstes erstellen wir eine Validierung, bei der mehr als eine bestimmte Anzahl von Zeichen entfernt wird.
Dieses Mal legen wir eine Validierung fest, die das Posten von 20 oder mehr Zeichen verhindert.
Es wird wie folgt sein.
post.rb
class Post < ApplicationRecord
validates :content, {presence: true}
validates :content, {length: {maximum: 20}}
end
Mit diesem Teil "validiert: Inhalt, {Länge: {Maximum: 20}}" können Sie Beiträge auf 20 Zeichen oder mehr beschränken.
Es gibt jedoch ein Problem, wenn Sie die Validierung einfach so einstellen. Wenn ich mehr als 20 Zeichen poste, wird der Textbereich leer.
Der Grund liegt im Post-Controller. Wenn die Validierung abgefangen wird und "redirect_to (" / posts / new ")" aufgerufen wird, führt das Routing eine neue Aktion auf dem Posts-Controller aus. Dann kann die Instanzvariable nicht an die Datei new.html.erb gesendet werden, und der Textbereich, den ich hart geschrieben habe, ist leer.
Um dies zu verhindern, verwenden wir eine Methode namens "Rendern".
Rendern ist eine Methode, die gerendert werden kann. Beim Rendern muss der Browser die Ansichtsdatei lesen und zeichnen.
Wenn Sie die Rendermethode in einer Ansichtsdatei verwenden, können Sie eine Teilvorlage verwenden, die den gemeinsamen Teil mehrerer Ansichtsdateien zeichnet.
Wenn Sie es diesmal im Controller verwenden, können Sie die erstellte Instanzvariable an die Ansichtsdatei übergeben, indem Sie sie ohne Aktion rendern.
Schreiben wir den Posts-Controller wie folgt um.
def create
post = Post.new(content: params[:content])
@content = params[:content]
if post.save
redirect_to("/posts/all")
else
render("posts/new")
end
end
Nachdem ich den Inhalt des Beitrags in "@ content" gespeichert habe, zeichne ich eine new.html.erb-Datei mit render anstelle von redirect_to.
Auf diese Weise können Sie die Instanzvariable "@ content" an new.html.erb übergeben.
Um diese Instanzvariable in der Datei new.html.erb anzuzeigen, schreiben Sie sie wie folgt neu:
new.html.erb
<%= form_tag("/posts/create") do %>
<textarea name="content" cols="30" rows="10"><%= @content%></textarea>
<input type="submit" value="Senden">
<% end %>
Wir übergeben "@ content" an den Anfangswert des Textbereichs. Jetzt können Sie den Wert sehen, wenn Sie in der Validierung stecken bleiben.
Probieren wir es aus.
Geben Sie wie unten gezeigt mindestens 20 Zeichen ein und drücken Sie Senden.
Nichts ändert sich besonders.
Das ist alles für diese Zeit.
Vielen Dank für Ihre Beziehung.
Bitte lesen Sie die folgenden Artikel, wenn Sie möchten.
Erklärung von Ruby on Rails für Anfänger ⑦ ~ Implementierung von Flash ~
Recommended Posts