Μια γρήγορη ματιά στο Rails Custom Validation

Πρόσφατα άρχισα να δουλεύω με τον Ruby (σχεδόν 2 μήνες τώρα) και τον Ruby on Rails (λίγο περισσότερο από 3 εβδομάδες). Το να δουλεύω με το πλαίσιο Active Record της Rails είναι ένα από τα αγαπημένα μου πράγματα για το Ruby on Rails. Σε αυτήν την ανάρτηση, θα εξετάσουμε επικυρώσεις στην Ενεργή εγγραφή, ειδικά προσαρμοσμένες. Εδώ είναι μια γρήγορη εισαγωγή στο Active Record προτού προχωρήσουμε στα καλά πράγματα.

Το Active Record είναι ένας από τους βασικούς πολύτιμους λίθους που αποτελούν το Ruby on Rails. Είναι το μέρος του πλαισίου που ασχολείται με βάσεις δεδομένων.

Είναι ένα πλαίσιο ORM (Object Relational Mapping) που σας επιτρέπει να δημιουργήσετε ένα σχήμα για μια βάση δεδομένων χρησιμοποιώντας καθαρό ρουμπίνι και βασίζεται στο μοτίβο σχεδίασης Active Record που περιγράφεται από τον Martin Fowler. Έτσι, με τα Active Records, δημιουργείτε το DB σας, δημιουργείτε πίνακες, αποθηκεύετε, ανακτάτε και διαγράφετε δεδομένα χρησιμοποιώντας ρουμπίνι που μεταφράζεται σε SQL κάτω από την κουκούλα.

Γρήγορη εισαγωγή

Ας υποθέσουμε ότι έχουμε ένα μαθητικό μοντέλο με όνομα και επώνυμο ιδιοτήτων. Για να χρησιμοποιήσουμε την Ενεργή Εγγραφή, απλώς πρέπει να επεκτείνουμε το ApplicationRecord και όταν το τρέχουμε rails db:migrate μας δίνει τη δήλωση SQL για αυτό.

Για να αλληλεπιδράσουμε με τη βάση δεδομένων, χρησιμοποιούμε μεθόδους που κληρονομούνται από το superclass ApplicationRecord.

Υποστηρίζει επίσης ενώσεις και άλλα στοιχεία βάσης δεδομένων.

Για μια λεπτομερή εισαγωγή στο Active Record, ανατρέξτε στον επίσημο οδηγό ρουμπίνι στις ράγες.

Επικύρωση

Επειδή γράφουμε εφαρμογές ιστού για χρήστες εκτός από εμάς, δεν μπορούμε να είμαστε σίγουροι ότι οι χρήστες θα εισάγουν πάντα έγκυρα δεδομένα στη βάση δεδομένων. Για να το επιβάλουμε αυτό, το Active Record μας παρέχει ένα πλαίσιο mini-validation που διασφαλίζει την παρουσία δεδομένων, τη μοναδικότητα ορισμένων πεδίων και ούτω καθεξής.

Ας δούμε τον πίνακα των μαθητών μας παραπάνω. Δεν θα θέλαμε να δημιουργήσουμε έναν χρήστη χωρίς όνομα ή επώνυμο που είναι προς το παρόν εφικτό. Για να το μετριάσουμε, πρέπει απλώς να τροποποιήσουμε την τάξη των μαθητών μας έτσι:

Με αυτήν την τροποποίηση, όταν δημιουργείτε μια παρουσία Φοιτητή χωρίς το όνομα ή το επίθετο, είναι μη έγκυρος μαθητής και οι ενεργές εγγραφές δεν θα τη διατηρήσουν στη βάση δεδομένων.

Η ενεργή εγγραφή μας παρέχει επίσης μεθόδους για να ελέγξουμε εάν τα δεδομένα μας είναι έγκυρα ή μη έγκυρα:

Με αυτό, δεν χρειάζεται καν να προσπαθήσουμε να αποθηκεύσουμε τα δεδομένα.

Εκτός από την απλή αποτροπή της διατήρησης των δεδομένων, το Active Record παρέχει επίσης μια λίστα σφαλμάτων που περιέχει τα χαρακτηριστικά που απέτυχαν επικυρώσεις και φιλικά προς το χρήστη μηνύματα προς παρουσίαση στους χρήστες. Μπορείτε να αποκτήσετε πρόσβαση σε αυτά τα σφάλματα όπως φαίνεται στο παρακάτω απόσπασμα.

Υπάρχουν πολλά περισσότερα σχετικά με την επικύρωση, αλλά δεν είναι το θέμα αυτού του άρθρου. Για μια βαθιά κατάδυση, μπορείτε να λάβετε μια εις βάθος εξήγηση από το κεφάλαιο οδηγιών ρουμπίνι στις ράγες για την επικύρωση.

Προσαρμοσμένη επικύρωση

Μερικές φορές, ίσως θέλουμε να χρησιμοποιήσουμε συγκεκριμένες επικυρώσεις που δεν είναι απλώς να διασφαλίσουμε την παρουσία ενός χαρακτηριστικού, του μήκους, της μοναδικότητας ή οποιουδήποτε από τους βοηθούς που παρέχονται από το Active Record. Ευτυχώς, το Active Record μας επιτρέπει να καθορίσουμε τις δικές μας προσαρμοσμένες επικυρώσεις, που είναι το σημείο αυτού του άρθρου.

Ας πούμε λοιπόν για το μοντέλο των μαθητών μας, έχουμε μια υποχρεωτική στήλη αριθμού εγγραφής μαθητή. Πρέπει να συμπληρωθεί από τη φόρμα εγγραφής (ξέρω ότι αυτό μπορεί να δημιουργηθεί αυτόματα) που θα πρέπει πάντα να ξεκινά με το έτος εγγραφής. Τώρα, η Ενεργή Εγγραφή δεν παρέχει τέτοιου είδους επικύρωση από το κουτί, αλλά μας επέτρεψε να το ορίσουμε και να το χρησιμοποιήσουμε.

Υπάρχουν κυρίως δύο τρόποι για να ορίσετε τη δική σας λογική επικύρωσης:

  • Προσαρμοσμένος επικυρωτής
  • Προσαρμοσμένες μέθοδοι

Προσαρμοσμένος επικυρωτής

Για επικύρωση χρησιμοποιώντας έναν προσαρμοσμένο επικυρωτή, πρέπει απλώς να ορίσετε τη λογική επικύρωσης σε μια κλάση που επεκτείνει το ActiveModel :: Validator και εφαρμόζει τη μέθοδο επικύρωσης, η οποία παίρνει την εγγραφή να επικυρωθεί ως όρισμα.

Εάν η επικύρωση αποτύχει, προσθέτει το χαρακτηριστικό στον πίνακα σφαλμάτων μαζί με το μήνυμα σφάλματος. Έτσι, στην περίπτωσή μας, θα έχουμε το RegNumValidator όπως φαίνεται παρακάτω:

Για να χρησιμοποιήσουμε αυτόν τον επικυρωτή στο μοντέλο Student, χρησιμοποιούμε τη validates_withμέθοδο:

Με αυτό, όταν ένας χρήστης προσπαθεί να δημιουργήσει έναν μαθητή με λάθος αριθμό εγγραφής, η δημιουργία εγγραφής αποτυγχάνει και μπορεί να εμφανιστεί ένα μήνυμα σφάλματος.

Προσαρμοσμένες μέθοδοι

Για να χρησιμοποιήσετε προσαρμοσμένες μεθόδους επικύρωσης, απλώς πρέπει να ορίσετε μια μέθοδο που θα χρησιμοποιηθεί για επικύρωση στην τάξη του μοντέλου σας και να την καλέσετε όπως θα κάνατε οποιαδήποτε από τις ενσωματωμένες επικυρώσεις - χρησιμοποιώντας validate. Χρησιμοποιώντας την ίδια λογική με αυτό που είχαμε παραπάνω, το μοντέλο μας θα μοιάζει με αυτό:

συμπέρασμα

Ελπίζω ότι αυτό το άρθρο σας έχει δώσει τις απαραίτητες γνώσεις για να ξεκινήσετε να εξερευνάτε την επικύρωση ενεργών εγγραφών και την προσαρμοσμένη επικύρωση ειδικά. Κάθε φορά που έχετε έναν κανόνα επικύρωσης που δεν αποτελεί μέρος του υπάρχοντος ενεργού API επικύρωσης εγγραφής, μπορείτε να γράψετε ένα μόνοι σας.

Ενεργές επικυρώσεις εγγραφής - Ruby on Rails Guides

Οι επικυρώσεις χρησιμοποιούνται για να διασφαλιστεί ότι μόνο έγκυρα δεδομένα αποθηκεύονται στη βάση δεδομένων σας. Για παράδειγμα, μπορεί να είναι σημαντικό να… guide.rubyonrails.org