[RUBY] [Journal de développement ⑬] Ne laissez pas 0 être entré dans le formulaire !!

À propos de la prémisse

Ravi de vous rencontrer, je m'appelle Irifune et je vais dans une école de programmation. Cet article est utilisé pour ma propre sortie en écrivant un dossier du développement d'applications personnelles, qui est un sujet de l'école. Si quelqu'un l'a lu, je vous serais reconnaissant de bien vouloir me faire part de vos commentaires.

Nous développerons un «outil de gestion des congés payés». Pour les spécifications, voir Articles précédents.

L'application sera déployée, mais elle n'est pas fournie en tant que service. Veuillez comprendre que ce n'est qu'une partie de l'auto-apprentissage. Passez ensuite au sujet principal.

À propos de la forme de cette application

Bien que cela ne soit pas mentionné dans l'article, j'ai créé un formulaire pour enregistrer la subvention et la digestion des vacances et un journal pour les afficher. Ci-dessous une photo.

Ceci est la forme. J'essaye de me reposer parce que je ne comprends pas Maître Taihei, mais ça me manquera cette fois. スクリーンショット 2020-05-15 10.53.14.png

Vient ensuite une vue pour vérifier l'historique de l'octroi des vacances et de la digestion. Nous l'avons mis en place car nous pensons qu'il sera nécessaire pour ceux qui l'entrent, comme par exemple vouloir vérifier la raison de la digestion de l'employé, ou vouloir vérifier s'ils se sont inscrits en vacances mais ne se sont pas inscrits de manière incorrecte. Vous pouvez également supprimer l'enregistrement de vacances. スクリーンショット 2020-05-17 16.05.12.png

Dans cet historique de digestion, la méthode est définie de manière à ce que «Grant», «Digest» et «Grant and Digest» soient affichés en bas à droite, mais les conditions ici sont liées à ce thème. Voici la partie méthode.

holiday.rb


class Holiday < ApplicationRecord
~ Omis ~
  def add_or_delete
    if add_day.nil?
      "#{delete_day}Digestion"
    elsif delete_day.nil?
      "#{add_day}Date d'octroi"
    else
      "#{add_day}Avec octroi de date#{delete_day}Digestion"
    end
  end
end

La condition est de savoir si add_day (nombre de jours accordés) ou delete_day (nombre de jours digérés) est nul (vide), mais le problème est l'existence de "0".

0 est également une donnée et différent de nul

Par exemple, si vous enregistrez 0 pour l'octroi et 1 pour la digestion lors de l'inscription pour les vacances, «0 jour d'octroi et 1 jour de digestion» sera affiché dans l'historique, ce qui est très gênant. Pour éviter cela, vous pouvez modifier la condition de la méthode définie dans le fichier modèle en "ni nul ni 0", mais après cela, il est difficile de définir cette condition pour chaque fonction à implémenter. Par conséquent, je souhaite empêcher "0" d'être enregistré lors du remplissage du formulaire.

Contenu de cette implémentation

Comme toujours, l'introduction est devenue longue, mais à partir de là, c'est le vrai sujet principal. Nous apporterons quelques améliorations afin que les colonnes de date d'attribution et de date de digestion ne contiennent que zéro ou un nombre supérieur ou égal à 1. Plus précisément, nous avons fait ce qui suit: Je ne sais pas si j'avais besoin de tous.

--Validation "exclusion"

Validation

La première chose que j'ai recherchée a été la validation car je ne voulais pas enregistrer 0. Quand je l'ai recherché, il y avait une validation appelée "exclusion" qui n'a pas enregistré de caractères spécifiques.

Article que j'ai utilisé comme référence [Rails] Explication complète! Maîtrisez comment utiliser la validation Rails!

Sur la base de l'article, j'ai essayé de le valider afin que les lettres «0» ne soient pas incluses à la date d'octroi et à la date de digestion.

holiday.rb


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

Je l'ai mis à 0 et l'ai essayé, mais il semble qu'il ne soit pas enregistré. Au cas où, je l'ai donné pendant 10 jours, mais j'ai pu l'enregistrer correctement.

Restrictions de saisie de formulaire

Cependant, comme il revient à l'index sans être sauvegardé, il devient difficile pour l'utilisateur de comprendre pourquoi il n'a pas été sauvegardé. Par exemple, j'ai tapé la date d'octroi comme 2 et la date de digestion comme 0, mais j'ai remarqué une erreur avant l'envoi, corrigé la date d'octroi à 0 et la date de digestion à 2, et appuyé sur le bouton d'envoi, mais il n'a pas été enregistré. Par conséquent, nous limiterons le formulaire lui-même afin que les nombres inférieurs à 1 ne puissent pas être saisis.

haml:holidays/new.html.haml


~ Omis ~
            .field
              .field-label
                = f.label "Jours de digestion"
              .field-input
                = f.number_field :delete_day, max: "50", min: "1"
            .field
              .field-label
                = f.label "Nombre de jours accordés"
              .field-input
                = f.number_field :add_day, max: "50", min: "1"
~ Omis ci-dessous ~

Ajout d'un maximum de 50 et d'un minimum de 1 à number_field. Cela permet de sélectionner seulement 1 à 50 avec les boutons en haut et en bas du formulaire. Dans le cas peu probable où vous saisissez manuellement 0 et essayez d'envoyer, une déclaration d'erreur apparaîtra en raison de la limitation de ce formulaire. スクリーンショット 2020-05-15 14.11.21.png

Installation du bouton de réinitialisation

Maintenant que vous avez défini le 0 pour ne pas être enregistré et que le 0 ne peut pas être soumis sur le formulaire, nous allons également mettre en place un bouton de réinitialisation sur le formulaire au cas où. Je pensais que peu de gens se donnaient la peine de saisir manuellement 0, alors j'ai fait une erreur et c'est devenu 0, mais je ne peux pas le changer avec les boutons haut et bas du formulaire! !! C'est pour éviter la situation.

haml:holidays/new.html.haml


~ Omis ~
          .btns
            = f.button "réinitialiser", type: :reset, class: 'btn'
            = f.button "enregistrement", type: :submit, class: 'btn'

Au début, j'ai écrit "f.reset ..." de la même manière que submit, mais cela n'a pas fonctionné, alors je l'ai vérifié à nouveau et je l'ai résolu dans l'article ci-dessous. L'article auquel j'ai fait référence "Comment implémenter le bouton de réinitialisation dans Rails"

Afficher la vue

J'ai oublié de prendre une capture d'écran de la vue finale, elle sera donc dans l'état après l'application du CSS, mais elle est complétée comme suit. スクリーンショット 2020-05-17 16.46.51.png

La pile d'aujourd'hui

Jusqu'à présent, je me suis concentré uniquement sur les fonctions flashy, j'ai donc appris que ces fonctions sont également importantes. Je pense qu'en tant que développeur, vous devez être très prudent car il n'y a pas d'erreurs évidentes. D'autre part, une telle validation peut être ajoutée de plus en plus si nécessaire. J'ai également estimé que la quantité de travail augmenterait trop si elle n'était pas limitée au montant nécessaire et suffisant.

Recommended Posts

[Journal de développement ⑬] Ne laissez pas 0 être entré dans le formulaire !!
Le saut de ligne du texte saisi n'est pas affiché dans la vue
Que faire lorsque les modifications du servlet ne sont pas reflétées
Permettez-moi de faire le développement à distance VS Code + le développement Java dans un environnement proxy
[Java] N'utilisez pas "+" dans append!
Que faire lorsque le préfixe c n'est pas lié dans JSP
[Rails / simple_format] Méthode d'assistance qui reflète les sauts de ligne saisis dans le formulaire
L'histoire selon laquelle le servlet n'a pas pu être chargé dans l'application Web Java
ne doit pas retourner dans l'instruction for
N'acceptez pas System.in en cours de progression
Ne pas revenir lors de la prise de notes en Ruby
Développement piloté par les tests avec le langage fonctionnel Elm
Ne déclarez pas de variables dans List en Java
[CentOS8] Puisque la commande javac n'a pas pu être utilisée, installez l'environnement de développement java.
Que faire si les modifications ne sont pas reflétées dans le fichier manifeste JAR
Résumer le cycle de vie des objets Java à prendre en compte dans le développement Android
Que faire lorsque «Impossible de trouver» dans l’une des sources apparaît dans l’environnement de développement avec Docker × Rails × RSpec