Définissez l'heure de début et l'heure de fin sur le tableau d'affichage et créez un site pour recruter des personnes. Définissez la validation de sorte que l'heure de fin ne précède pas l'heure de début. (* De plus, ajoutez la validation que l'heure de début ne précède pas la date et l'heure actuelles)
Ruby 2.5.0 Rails 6.0.3.4
Lors de la création d'un tableau de recrutement, définissez-le de sorte que vous puissiez saisir l'heure de début et l'heure de fin.
Cette fois, la version recrutement s'appelle board. Le contenu du tableau est comme ↓
XXXX_create_boards.rb
class CreateBoards < ActiveRecord::Migration[6.0]
def change
create_table :boards do |t|
(Omis)
t.datetime :start_time, null: false
t.datetime :finish_time, null: false
t.timestamps
end
end
end
Définissez l'heure de début dans la colonne "start_time" et l'heure de fin dans la colonne "finish_time".
J'ai défini les validations suivantes.
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, "Veuillez sélectionner une heure postérieure à l'heure de début") if self.start_time > self.finish_time
end
def start_check
errors.add(:start_time, "Veuillez sélectionner une heure postérieure à la date et à l'heure actuelles") if self.start_time < Time.now
end
Je vais expliquer brièvement chacun d'eux.
models/board.rb
validate :start_finish_check
validate :start_check
Ici, nous vérifions chaque processus. Notez que c'est «valider» au lieu de «valider». Si c'est validate
, vous obtiendrez l'erreur" Vous devez fournir au moins une validation ".
def start_finish_check
errors.add(:finish_time, "Veuillez sélectionner une heure postérieure à l'heure de début") if self.start_time > self.finish_time
#↑ pour comparer l'heure de début et l'heure de fin
end
def start_check
errors.add(:start_time, "Veuillez sélectionner une heure postérieure à la date et à l'heure actuelles") if self.start_time < Time.now
#↑ pour comparer l'heure de début et la date et l'heure actuelles
end
Ici, nous comparons à chaque fois. Si ʻif` est vrai, une déclaration d'erreur sera ajoutée. Il n'est pas nécessaire de l'écrire, mais il est également possible d'écrire la direction du nombre d'inégalité «>» et de réécrire «si» comme «à moins». De plus, le même processus est effectué sans écrire «self». Ce domaine est votre choix.
Cette fois, il s'agissait d'une comparaison de type Datetime, mais je pense qu'elle peut être implémentée de la même manière pour d'autres types. ↓ est un article de référence pour obtenir la date et l'heure Obtenez la date et l'heure actuelles avec ruby [Différences entre l'heure, la date, la date et l'heure, TimeWithZone entre Ruby et Rails] (https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c)
Comment valider le type datetime avant et après l'entrée avec des rails [Validation] rails Comment spécifier après la date d'aujourd'hui