J'ai plusieurs champs différents qui stockent différents numéros de téléphone dans mon application Rails en tant que chaîne. Je peux utiliser le validateur au format Rails intégré avec une expression de regex. Existe-t-il un moyen de placer cette expression dans une méthode d'assistance pour toutes mes validations de numéro de téléphone au lieu d'avoir à ouvrir chaque fichier de modèle et coller la chaîne d'expression. P>
4 Réponses :
Un moyen de faire cela consiste à créer une préoccupation qui sera incluse dans chaque modèle disposant d'un numéro de téléphone. Dans modèles / préoccupations code>, créez un nouveau fichier appelé quelque chose comme phonable.rb code>. # models/my_model.rb
class MyModel < ApplicationRecord
include Phonable
validates :phone, format: {with: VALID_PHONE_REGEX}
...
end
Vous pouvez avoir besoin de n'importe quel fichier de application.rb: alors vous utilisez simplement la constante partout où vous pouvez également utiliser p> Vous pouvez également utiliser la fonctionnalité intégrée de l'autoload des rails, par exemple avec l'approche de préoccupation, l'autre commentateur a été défini - le fichier de préoccupation est automatiquement porté par défaut, de même que les modèles, les contrôleurs, etc p> Chargement de fichiers personnalisés au lieu d'utiliser les défauts des défauts des rails. idiomatique ou la "voie des rails". Cependant, je pense qu'il est important de comprendre que vous pouvez charger tous les fichiers que vous souhaitez. Certaines personnes ont automatiquement chargé l'ensemble du dossier Une autre alternative consiste à placer votre code quelque part dans le dossier lib / code> et sous-dossiers (voir Chargement automatique des fichiers libra dans les rails 4 ) P> config / initialiseurs code>, ces fichiers sont automatiquement chargés au démarrage et vous pouvez définir des classes / modules / constantes partagées là-bas p> p>
Bien qu'il y ait plusieurs bonnes solutions ici, j'ai utilisé celui-ci parce que j'utilise cette même chaîne de regex pour reformater mes numéros de téléphone à l'aide de la méthode de capture avant l'enregistrement de l'enregistrement. Cette solution me permet d'utiliser la même constante dans la validation de format et la fonction de reformaté. Si vous utilisez une chaîne de réégionner juste pour valider le format, je vous recommanderais le validateur personnalisé de INGINEERSMNKYKY.
Vous pouvez le mettre dans ApplicationRecord (Application_Record.rb)
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
VALID_PHONE_NUMBER_REGEX = /\d{10}/ # your regex here
end
Ajouter une application de validateur personnalisée / validateurs / téléphone_validator.rb puis dans vos modèles p>
C'est aussi une bonne réponse, mais la réponse que j'ai marquée ajusté mon cas d'utilisation un peu mieux. Voir le commentaire sur Réponse pour plus d'informations. J'ai également suscité cette réponse.
@Brianttatum Rien ne vous interdit d'utiliser les deux options Vous pouvez simplement utiliser votre constante dans le PhoneValidator code>. À mon avis TÉLÉPHONE: TRUE CODE> TYPINATION DES BEATS Format: {avec: Téléphone_number_regex} Code> Plusieurs fois
Très bon point, cela nettoierait beaucoup de choses et soyez moins à taper.