
Ik ben onlangs begonnen met werken met Ruby (nu bijna 2 maanden) en Ruby on Rails (iets meer dan 3 weken). Werken met het Active Record-framework van Rails is een van mijn favoriete dingen over Ruby on Rails. In dit bericht zullen we validaties in Active Record bekijken, met name aangepaste validaties. Hier is een korte introductie van Active Record voordat we naar de goede dingen gaan.
Active Record is een van de belangrijkste edelstenen van Ruby on Rails. Het is het deel van het raamwerk dat zich bezighoudt met databases.
Het is een ORM-raamwerk (Object Relational Mapping) waarmee u een schema voor een database kunt bouwen met pure ruby en het is gebaseerd op het Active Record-ontwerppatroon beschreven door Martin Fowler. Dus met Active Records maakt u uw database aan, maakt u tabellen, slaat u gegevens op, haalt ze op en verwijdert u gegevens met behulp van ruby, wat zich vertaalt naar SQL onder de motorkap.
Snelle intro
Stel dat we een studentenmodel hebben met de eigenschappen voornaam en achternaam. Om Active Record te gebruiken, hoeven we alleen het ApplicationRecord uit te breiden en wanneer we het uitvoeren rails db:migrate
, geeft het ons de SQL-instructie ervoor.
Voor interactie met de database gebruiken we methoden die zijn overgenomen van de ApplicationRecord-superklasse.
Het ondersteunt ook verenigingen en andere databasespullen.
Voor een gedetailleerde introductie van Active Record, bekijk de officiële ruby on rails-gids.
Validatie
Omdat we webapplicaties schrijven voor andere gebruikers dan wijzelf, kunnen we er niet zeker van zijn dat de gebruikers altijd geldige gegevens in de database zullen invoeren. Om dit af te dwingen, biedt Active Record ons een mini-validatieframework dat de aanwezigheid van gegevens, het unieke karakter van bepaalde velden, enzovoort garandeert.
Laten we naar onze studententabel hierboven kijken. We zouden geen gebruiker willen maken zonder een voor- of achternaam, wat momenteel mogelijk is. Om dit te verzachten, hoeven we alleen onze studentenklasse als volgt aan te passen:
Als u met deze wijziging een studentinstantie maakt zonder de voornaam of achternaamattributen, is het een ongeldige student en zullen actieve records deze niet in de database bewaren.
Active record biedt ons ook methoden om te controleren of onze gegevens geldig of ongeldig zijn:
Hiermee hoeven we niet eens te proberen de gegevens op te slaan.
Behalve dat alleen wordt voorkomen dat de gegevens worden bewaard, biedt Active Record ook een foutenlijst met de attributen die mislukte validaties en gebruiksvriendelijke berichten om aan de gebruikers te presenteren. Deze fouten zijn toegankelijk zoals weergegeven in het onderstaande fragment.
Er is veel meer over validatie, maar het is niet het onderwerp van dit artikel. Voor een diepe duik kunt u een uitgebreide uitleg krijgen in het hoofdstuk over validatie in de ruby on rails-gids.
Aangepaste validatie
Soms willen we bepaalde validaties gebruiken die meer zijn dan alleen het verzekeren van de aanwezigheid van een attribuut, lengte, uniekheid of een van de helpers die door Active Record worden geboden. Gelukkig stelt Active Record ons in staat om onze eigen aangepaste validaties te definiëren, wat het punt is van dit artikel.
Dus, laten we zeggen dat we voor ons studentenmodel een verplichte kolom met studentenregistratienummer hebben. Het moet worden ingevuld vanaf het registratieformulier (ik weet dat dit automatisch kan worden gegenereerd) dat altijd moet beginnen met het registratiejaar. Nu biedt Active Record dit soort validatie niet out-of-the-box, maar heeft het ons mogelijk gemaakt om het te definiëren en te gebruiken.
Er zijn hoofdzakelijk twee manieren om uw eigen validatielogica te definiëren:
- Aangepaste validator
- Aangepaste methoden
Aangepaste validator
Om te valideren met behulp van een aangepaste validator, hoeft u alleen maar uw validatielogica te definiëren in een klasse die ActiveModel :: Validator uitbreidt en de validatiemethode implementeert, waarbij het te valideren record als argument wordt gebruikt.
Als de validatie mislukt, wordt het kenmerk samen met het foutbericht toegevoegd aan de array met fouten. Dus in ons geval hebben we RegNumValidator zoals hieronder te zien is:
Om deze validator in het studentenmodel te gebruiken, gebruiken we de validates_with
methode:
Hiermee, wanneer een gebruiker probeert een student met het verkeerde registratienummer aan te maken, mislukt het maken van de record en kan een foutmelding worden weergegeven.
Aangepaste methoden
Om aangepaste methoden voor validatie te gebruiken, hoeft u alleen maar een methode te definiëren om te gebruiken voor validatie in uw modelklasse en deze aan te roepen zoals u een van de ingebouwde validaties zou noemen - using validate
. Met dezelfde logica als wat we hierboven hadden, zou ons model er als volgt uitzien:
Conclusie
Ik hoop dat dit artikel je de nodige kennis heeft gegeven om met name Active Records-validatie en aangepaste validatie te verkennen. Wanneer u een validatieregel heeft die geen deel uitmaakt van de bestaande actieve recordvalidatie-API, kunt u er zelf een schrijven.
Actieve recordvalidaties - Ruby on Rails-gidsen
Validaties worden gebruikt om ervoor te zorgen dat alleen geldige gegevens in uw database worden opgeslagen. Het kan bijvoorbeeld belangrijk zijn om ... gidsen.rubyonrails.org