Et hurtigt kig på Rails Custom Validation

Jeg begyndte for nylig at arbejde med Ruby (næsten 2 måneder nu) og Ruby on Rails (lidt over 3 uger). At arbejde med Rails Active Record-ramme er en af ​​mine yndlings ting ved Ruby on Rails. I dette indlæg vil vi se på valideringer i Active Record, specielt brugerdefinerede. Her er en hurtig introduktion til Active Record, før vi går videre til de gode ting.

Active Record er en af ​​de centrale perler, der udgør Ruby on Rails. Det er den del af rammen, der beskæftiger sig med databaser.

Det er en ORM-ramme (Object Relational Mapping), der lader dig opbygge et skema til en database ved hjælp af ren rubin, og det er baseret på Active Record-designmønsteret beskrevet af Martin Fowler. Så med Active Records opretter du din DB, opretter tabeller, gemmer, henter og sletter data ved hjælp af rubin, der oversættes til SQL under emhætten.

Hurtig introduktion

Antag, at vi har en elevmodel med egenskabernes fornavn og efternavn. For at bruge Active Record skal vi bare udvide ApplicationRecord, og når vi kører rails db:migrate , giver det os SQL-sætningen til det.

For at interagere med databasen bruger vi metoder, der er nedarvet fra ApplicationRecord-superklassen.

Det understøtter også foreninger og andre databaseartikler.

For en detaljeret introduktion til Active Record, se den officielle ruby ​​on rails guide.

Validering

Da vi skriver webapplikationer til andre end os selv, kan vi ikke være sikre på, at brugerne altid vil indtaste gyldige data i databasen. For at håndhæve dette giver Active Record os en mini-valideringsramme, der sikrer tilstedeværelsen af ​​data, unikhed af visse felter osv.

Lad os se på vores studerendes tabel ovenfor. Vi ønsker ikke at oprette en bruger uden et fornavn eller efternavn, som i øjeblikket er muligt. For at afbøde dette er vi bare nødt til at ændre vores elevklasse sådan:

Med denne ændring, når du opretter en elevinstans uden fornavn eller efternavn-attributter, er det en ugyldig studerende, og aktive poster vil ikke fortsætte den til databasen.

Aktiv registrering giver os også metoder til at kontrollere, om vores data er gyldige eller ugyldige:

Med dette behøver vi ikke engang at forsøge at gemme dataene.

Bortset fra blot at forhindre, at dataene vedholdes, giver Active Record også en fejlliste, der indeholder de attributter, der mislykkedes valideringer og brugervenlige meddelelser, der skal præsenteres for brugerne. Disse fejl kan fås som vist i uddraget nedenfor.

Der er meget mere om validering, men det er ikke emnet for denne artikel. For et dybt dyk kan du få en detaljeret forklaring fra kapitlet Ruby on Rails Guide om validering.

Brugerdefineret validering

Nogle gange vil vi måske bruge visse valideringer, der er mere end bare at sikre tilstedeværelsen af ​​en attribut, længde, unikhed eller nogen af ​​de hjælpere, der leveres af Active Record. Heldigvis giver Active Record os mulighed for at definere vores egne brugerdefinerede valideringer, hvilket er meningen med denne artikel.

Så lad os sige, at for vores studerende-model har vi en obligatorisk kolonne til studenterregistreringsnummer. Det skal udfyldes fra registreringsformularen (jeg ved, at dette kan genereres automatisk), som altid skal starte med registreringsåret. Nu giver Active Record ikke denne form for validering ud af kassen, men har gjort det muligt for os at definere det og bruge det.

Der er primært to måder at definere din egen valideringslogik på:

  • Custom Validator
  • Brugerdefinerede metoder

Custom Validator

For at validere ved hjælp af en brugerdefineret validator skal du bare definere din valideringslogik i en klasse, der udvider ActiveModel :: Validator og implementerer valideringsmetoden, der tager posten til validering som argument.

Hvis validering mislykkes, føjer den attributten til fejlarrayet sammen med dens fejlmeddelelse. Så i vores tilfælde har vi RegNumValidator som vist nedenfor:

For at bruge denne validator i studentmodellen bruger vi validates_withmetoden:

Når en bruger forsøger at oprette en elev med det forkerte registreringsnummer, mislykkes oprettelsen af ​​posten, og der kan vises en fejlmeddelelse.

Brugerdefinerede metoder

For at bruge brugerdefinerede metoder til validering skal du bare definere en metode, der skal bruges til validering i din modelklasse og kalde det som om du ville kalde en af ​​de indbyggede valideringer - ved hjælp af validate. Ved hjælp af den samme logik som det, vi havde ovenfor, ville vores model se sådan ud:

Konklusion

Jeg håber, at denne artikel har givet dig den nødvendige viden til at begynde at undersøge validering af Active Records og speciel validering. Når du har en valideringsregel, der ikke er en del af den eksisterende aktive postvaliderings-API, kan du skrive en selv.

Valideringer af aktive poster - Ruby on Rails Guides

Valideringer bruges til at sikre, at kun gyldige data gemmes i din database. For eksempel kan det være vigtigt at ... guides.rubyonrails.org