[RUBY] [Entwicklungsprotokoll ⑬] Lassen Sie 0 nicht in das Formular eingeben !!

Über die Prämisse

Schön dich kennenzulernen, mein Name ist Irifune und ich gehe auf eine Programmierschule. Dieser Artikel wird für meine eigene Ausgabe verwendet, indem ich eine Aufzeichnung über die Entwicklung persönlicher Apps schreibe, die Gegenstand der Schule ist. Wenn jemand es gelesen hat, wäre ich dankbar, wenn Sie mir ein Feedback geben könnten.

Wir werden ein "bezahltes Urlaubsmanagement-Tool" entwickeln. Technische Daten finden Sie unter Frühere Artikel.

Die App wird bereitgestellt, jedoch nicht als Dienst bereitgestellt. Bitte haben Sie Verständnis dafür, dass dies nur ein Teil des Selbststudiums ist. Gehen Sie dann zum Hauptthema.

Über die Form dieser App

Obwohl im Artikel nicht erwähnt, habe ich ein Formular erstellt, um die Gewährung und Verdauung von Feiertagen zu registrieren, und ein Protokoll, um sie anzuzeigen. Unten ist ein Foto.

Dies ist die Form. Ich versuche mich auszuruhen, weil ich Meister Taihei nicht verstehe, aber diesmal werde ich es vermissen. スクリーンショット 2020-05-15 10.53.14.png

Als nächstes sehen Sie eine Übersicht über die Geschichte der Gewährung von Feiertagen und der Verdauung. Wir haben es eingerichtet, weil wir glauben, dass es für diejenigen notwendig sein wird, die es betreten, z. B. um den Grund für die Verdauung des Mitarbeiters zu bestätigen oder um zu bestätigen, dass er sich im Urlaub registriert hat, sich aber nicht falsch registriert hat. Sie können auch die Urlaubsregistrierung löschen. スクリーンショット 2020-05-17 16.05.12.png

In diesem Aufschlussverlauf ist die Methode so eingestellt, dass unten rechts "Grant", "Digest" und "Grant and Digest" angezeigt werden. Die Bedingungen hier beziehen sich jedoch auf dieses Thema. Das Folgende ist der Methodenteil.

holiday.rb


class Holiday < ApplicationRecord
~ Ausgelassen ~
  def add_or_delete
    if add_day.nil?
      "#{delete_day}Verdauung"
    elsif delete_day.nil?
      "#{add_day}Datumsgewährung"
    else
      "#{add_day}Mit Datumsgewährung#{delete_day}Verdauung"
    end
  end
end

Die Bedingung ist, ob add_day (Anzahl der gewährten Tage) oder delete_day (Anzahl der verdauten Tage) null (leer) ist, aber das Problem ist das Vorhandensein von "0".

0 ist auch Daten und unterscheidet sich von Null

Wenn Sie beispielsweise bei der Registrierung für Feiertage 0 für die Gewährung und 1 für die Verdauung registrieren, wird im Verlauf "0 Tage Bewilligung und 1 Tag Verdauung" angezeigt, was sehr umständlich ist. Um dies zu vermeiden, können Sie die Bedingung der in der Modelldatei definierten Methode in "nicht null oder 0" ändern. Danach ist es jedoch schwierig, diese Bedingung für jede zu implementierende Funktion festzulegen. Daher möchte ich verhindern, dass beim Ausfüllen des Formulars "0" registriert wird.

Inhalt dieser Implementierung

Wie immer ist die Einführung lang geworden, aber von hier aus ist es das wahre Hauptthema. Wir werden einige Verbesserungen vornehmen, damit die Spalten Gewährungsdatum und Aufschlussdatum nur Null oder eine Zahl größer oder gleich 1 enthalten. Im Einzelnen haben wir Folgendes getan: Ich weiß nicht, ob ich sie alle brauchte.

Validierung

Das erste, wonach ich gesucht habe, war die Validierung, weil ich 0 nicht speichern wollte. Als ich nachgeschlagen habe, gab es eine Validierung namens "Ausschluss", bei der bestimmte Zeichen nicht gespeichert wurden.

Artikel, den ich als Referenz verwendet habe [Rails] Vollständige Erklärung! Beherrschen Sie die Verwendung der Rails-Validierung!

Basierend auf dem Artikel habe ich versucht, ihn so zu validieren, dass die Buchstaben "0" am Gewährungsdatum und am Aufschlussdatum nicht enthalten sind.

holiday.rb


class Holiday < ApplicationRecord
  validates :reason, presence: true
  validates :add_day, exclusion: { in: [0]}
  validates :delete_day, exclusion: { in: [0]}
~ Ausgelassen ~
end

Ich habe es auf 0 gesetzt und versucht, aber es scheint, dass es nicht gespeichert ist. Nur für den Fall, ich gab es für 10 Tage, aber ich konnte es richtig speichern.

Formulareingabebeschränkungen

Da es jedoch zum Index zurückkehrt, ohne gespeichert zu werden, ist es für den Benutzer schwierig zu verstehen, warum es nicht gespeichert wurde. Ich habe beispielsweise das Gewährungsdatum als 2 und das Aufschlussdatum als 0 eingegeben, aber vor dem Senden einen Fehler festgestellt, das Gewährungsdatum auf 0 und das Aufschlussdatum auf 2 korrigiert und die Senden-Taste gedrückt, aber es wurde nicht gespeichert. Daher werden wir das Formular selbst so einschränken, dass keine Zahlen unter 1 eingegeben werden können.

haml:holidays/new.html.haml


~ Ausgelassen ~
            .field
              .field-label
                = f.label "Verdauungstage"
              .field-input
                = f.number_field :delete_day, max: "50", min: "1"
            .field
              .field-label
                = f.label "Anzahl der gewährten Tage"
              .field-input
                = f.number_field :add_day, max: "50", min: "1"
~ Unten weggelassen ~

Maximal 50 und mindestens 1 zu number_field hinzugefügt. Auf diese Weise können Sie nur 1 bis 50 mit den Schaltflächen oben und unten im Formular auswählen. In dem unwahrscheinlichen Fall, dass Sie manuell 0 eingeben und versuchen zu senden, wird aufgrund der Einschränkung dieses Formulars eine Fehlermeldung angezeigt. スクリーンショット 2020-05-15 14.11.21.png

Installation der Reset-Taste

Nachdem Sie festgelegt haben, dass die 0 nicht gespeichert werden soll und die 0 nicht im Formular gesendet werden kann, richten wir für alle Fälle auch eine Schaltfläche zum Zurücksetzen des Formulars ein. Ich dachte, dass es nur wenige Leute gibt, die sich die Mühe machen, 0 manuell einzugeben, also habe ich einen Fehler gemacht und es wurde 0, aber ich kann es nicht mit den Auf- und Ab-Schaltflächen im Formular ändern! !! Dies soll die Situation verhindern.

haml:holidays/new.html.haml


~ Ausgelassen ~
          .btns
            = f.button "zurücksetzen", type: :reset, class: 'btn'
            = f.button "Anmeldung", type: :submit, class: 'btn'

Zuerst habe ich "f.reset ..." auf die gleiche Weise wie "submit" geschrieben, aber es hat nicht funktioniert, also habe ich es erneut überprüft und im folgenden Artikel gelöst. Der Artikel, auf den ich verwiesen habe "So implementieren Sie die Reset-Schaltfläche in Rails"

Ansicht anzeigen

Ich habe vergessen, einen Screenshot der endgültigen Ansicht zu machen, damit diese nach dem Anwenden von CSS in dem Zustand ist, der jedoch wie folgt abgeschlossen wird. スクリーンショット 2020-05-17 16.46.51.png

Der heutige Stapel

Bisher habe ich mich nur auf auffällige Funktionen konzentriert, daher habe ich gelernt, dass diese Funktionen ebenfalls wichtig sind. Ich denke, dass Sie als Entwickler sehr vorsichtig sein müssen, da es keine offensichtlichen Fehler gibt. Andererseits kann eine solche Validierung bei Bedarf immer mehr hinzugefügt werden. Ich hatte auch das Gefühl, dass der Arbeitsaufwand zu stark zunehmen würde, wenn der Arbeitsaufwand nicht auf dem erforderlichen und ausreichenden Betrag gehalten würde.

Recommended Posts

[Entwicklungsprotokoll ⑬] Lassen Sie 0 nicht in das Formular eingeben !!
Der Zeilenumbruch des eingegebenen Textes wird in der Ansicht nicht angezeigt
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Lassen Sie mich VS Code Remote Development + Java-Entwicklung in einer Proxy-Umgebung durchführen
[Java] Verwenden Sie nicht "+" im Anhang!
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
[Rails / simple_format] Hilfsmethode, die die im Formular eingegebenen Zeilenumbrüche widerspiegelt
Die Geschichte, dass das Servlet nicht in die Java-Webanwendung geladen werden konnte
darf nicht in der for-Anweisung zurückgegeben werden
Akzeptieren Sie System.in nicht im Gradle-Lauf
Kehren Sie nicht zurück, wenn Sie Notizen in Ruby machen
Testgetriebene Entwicklung mit der Funktionssprache Elm
Deklarieren Sie keine Variablen in List in Java
[CentOS8] Da der Befehl javac nicht verwendet werden konnte, installieren Sie die Java-Entwicklungsumgebung.
Was tun, wenn die Änderungen nicht in der JAR-Manifestdatei berücksichtigt werden?
Fassen Sie den Lebenszyklus von Java-Objekten zusammen, die bei der Android-Entwicklung berücksichtigt werden müssen
Was ist zu tun, wenn in einer der Quellen in der Entwicklungsumgebung mit Docker × Rails × RSpec "Nicht gefunden" angezeigt wird?