[RUBY] [Schienen] Überprüfen Sie die Startzeit (Datum / Uhrzeit-Typ) und die Endzeit

Implementierungsdetails

Stellen Sie die Start- und Endzeit am Schwarzen Brett ein und erstellen Sie eine Website, um Personen zu rekrutieren. Stellen Sie die Validierung so ein, dass die Endzeit nicht vor der Startzeit liegt. (* Fügen Sie außerdem die Bestätigung hinzu, dass die Startzeit nicht vor dem aktuellen Datum und der aktuellen Uhrzeit liegt.)

Umgebung

Ruby 2.5.0 Rails 6.0.3.4

Annahme

Stellen Sie beim Erstellen eines Rekrutierungsausschusses so ein, dass Sie die Start- und Endzeit eingeben können.

Tatsächlicher Code

Dieses Mal heißt die Rekrutierungsversion Board. Der Inhalt der Tabelle ist wie folgt: ↓

XXXX_create_boards.rb


class CreateBoards < ActiveRecord::Migration[6.0]
  def change
    create_table :boards do |t|
(Weggelassen)
      t.datetime :start_time, null: false
      t.datetime :finish_time, null: false
      
      t.timestamps
    end
  end
end

Stellen Sie die Startzeit in der Spalte "start_time" und die Endzeit in der Spalte "finish_time" ein.

Modell-

Ich habe die folgenden Validierungen festgelegt.

models/board.rb


  validates :start_time, presence: true
  validates :finish_time, presence: true
  validate :start_finish_check
  validate :start_check

  def start_finish_check
    errors.add(:finish_time, "Bitte wählen Sie eine Zeit später als die Startzeit") if self.start_time > self.finish_time
  end

  def start_check
    errors.add(:start_time, "Bitte wählen Sie eine Zeit nach dem aktuellen Datum und der aktuellen Uhrzeit") if self.start_time < Time.now
  end

Ich werde jeden von ihnen kurz erklären.

models/board.rb


  validate :start_finish_check
  validate :start_check

Hier überprüfen wir jeden Prozess. Beachten Sie, dass es "validieren" statt "validieren" ist. Wenn es "validieren" ist, wird die Fehlermeldung "Sie müssen mindestens eine Validierung angeben" angezeigt.

  def start_finish_check
    errors.add(:finish_time, "Bitte wählen Sie eine Zeit später als die Startzeit") if self.start_time > self.finish_time
 #↑ um Startzeit und Endzeit zu vergleichen
  end

  def start_check
    errors.add(:start_time, "Bitte wählen Sie eine Zeit nach dem aktuellen Datum und der aktuellen Uhrzeit") if self.start_time < Time.now
 #↑ zum Vergleichen der Startzeit und des aktuellen Datums und der aktuellen Uhrzeit
  end

Hier vergleichen wir jedes Mal. Wenn if wahr ist, wird eine Fehleranweisung hinzugefügt. Es ist nicht notwendig, es zu schreiben, aber es ist auch möglich, die Richtung der Ungleichungszahl ">" und "wenn" als "es sei denn" umzuschreiben. Der gleiche Vorgang wird auch ausgeführt, ohne "self" zu schreiben. Dieser Bereich ist Ihre Wahl.

Zeit bekommen

Diesmal war es ein Vergleich des Datetime-Typs, aber ich denke, dass er für andere Typen auf die gleiche Weise implementiert werden kann. ↓ ist ein Referenzartikel zum Abrufen von Datum und Uhrzeit Aktuelles Datum und Uhrzeit mit Ruby abrufen [Unterschiede zwischen Zeit, Datum, DateTime, TimeWithZone zwischen Ruby und Rails] (https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)

Referenzartikel

Überprüfen des Datums- / Uhrzeittyps vor und nach der Eingabe mit Schienen [Validierung] Schienen So legen Sie nach dem heutigen Datum fest

Recommended Posts

[Schienen] Überprüfen Sie die Startzeit (Datum / Uhrzeit-Typ) und die Endzeit
[Schienen] Startzeit und Endzeit speichern
[Schienen] Vorsichtsmaßnahmen beim Vergleich von Datum und Uhrzeit mit DateTime
Welche Klasse sollte verwendet werden, um Datum und Uhrzeit in der Rails-App abzurufen (Time, DateTime, TimeWithZone)?
[Schienen] So erstellen Sie eine Tabelle, fügen eine Spalte hinzu und ändern den Spaltentyp
[Rails / ActiveRecord] Ich möchte den Wert überprüfen, bevor der Typ konvertiert wird (_before_type_cast).
Formatieren Sie das von created_at angegebene Datum und die Uhrzeit
[Rails / Active Record] Über den Unterschied zwischen create und create!
Ein Memo über den Fluss von Rails und Vue
Vereinheitlichen Sie die Zeitzone der Rails-App mit der japanischen Zeit
Umweltbauweise und Fehlerbehebung zum Zeitpunkt der gemeinsamen Entwicklung (Schienen, Docker und Github)