Als onze webapplicatie eenmaal is gedefinieerd en we al weten wat we moeten bereiken, is het vaak nodig om een vorm van gegevenspersistentie te bereiken, dit vertaalt zich in het ergens opslaan van de gegevens die ermee worden verkregen en deze vervolgens te gebruiken en dit is wat de database maakt motoren voor ons.
Omdat onze gegevens dan in de applicaties moeten blijven bestaan, moeten we zoeken naar of begrijpen hoe we met deze bewerkingen moeten omgaan en hoewel het tegenwoordig misschien ingewikkeld klinkt, zijn er veel tools die ons werk vergemakkelijken, bijvoorbeeld zijn er de ORM die ons de mogelijkheid geven om structuren te creëren die onafhankelijk zijn van de engine, zodat we bijna nooit een zuivere query zullen schrijven.
In het geval van Sinatra Er zijn al verschillende pareltjes die de verbindingen en het beheer van de databases verzorgen, dus we zullen zien wat ze zijn en hoe we ze in onze applicatie kunnen integreren.
Kies de database-engine
De eerste stap die we moeten doen, is de juiste database-engine kiezen voor onze toepassing, er zijn veel oplossingen op de markt en elk met een ander doel, in het geval van Sinatra we zullen over het algemeen gebruiken MySQL of PostgreSQL in een productieomgeving, of bij gebrek daaraan SQLite in ontwikkelomgevingen.
In het geval van deze tutorial hebben we voor de laatste optie gekozen vanwege het installatiegemak en de snelheid waarmee we aan de slag kunnen.
SQLite installeren
Om deze engine te installeren, gaan we eerst naar de officiële website en downloaden het pakket dat overeenkomt met ons systeem, veel distributies in Linux Ze worden al geleverd met deze engine geïnstalleerd en functioneel, dus we zullen zien hoe we dit proces kunnen uitvoeren in ramen.
In de vorige afbeelding zien we dat we de vooraf gecompileerde binaire bestanden moeten downloaden, zodra dit is gebeurd, gaan we ze uitpakken in een map met de naam SQLite in onze C:-schijf en we voegen die map toe als een omgevingsvariabele in onze PAD. Zodra het bovenstaande is gedaan tijdens het schrijven sqlite3 in onze console zouden we zoiets als het volgende moeten zien.
Zodra deze stap is behandeld, moeten we nu het bijbehorende stuurprogramma downloaden voor: Robijn, daarom moeten we in onze opdrachtconsole het volgende schrijven:
gem installeer sqlite3Dit zou ons een resultaat moeten geven zoals het volgende, wat aangeeft dat de installatie van de edelsteen succesvol was om verbinding te maken met SQLite.
de ORM
Aangezien we onze Database-engine hebben, is het nu de beurt om de ORMDit is een tool waarmee we de tabellen van een database kunnen converteren naar objecten, op deze manier kunnen we er gemakkelijker mee werken in onze applicatie.
VoordeelHet belangrijkste voordeel van ORM is dat het ons in staat stelt om onafhankelijk te zijn van de engine, omdat we, doordat we SQL-code niet rechtstreeks hoeven te schrijven, eenvoudig de configuratie kunnen wijzigen en de bijbehorende migraties kunnen uitvoeren.
Er zijn natuurlijk veel mogelijkheden om mee te werken Robijn en met Sinatra, maar een van de vriendelijkste om te beginnen is DataMapper.
Installeer DataMapper
De installatie hiervan ORM Het kan niet eenvoudiger, en dit dankzij het feit dat het ook een juweeltje is, dus we moeten gewoon een paar instructies in onze console uitvoeren, de eerste is de volgende die ons helpt om de basiscomponent te verkrijgen:
gem install data_mapperDit zou een resultaat moeten opleveren dat lijkt op het volgende:
Nu we de basis hebben, hoeven we alleen maar de driver te installeren, zodat: DataMapper kan communiceren met SQLite, hiervoor moeten we het volgende juweeltje installeren:
gem installeer dm-sqlite-adapterDit is wat onze applicaties in staat zal stellen tabellen te maken en de database te gebruiken zonder SQL-code te hoeven schrijven.Uiteindelijk zou de installatie van het stuurprogramma ons het volgende bericht in onze console moeten geven.
Verbinding maken met een database
Omdat we de afhankelijkheden hebben geïnstalleerd, moeten we nu doorgaan met testen hoe onze nieuwe gegevenspersistentieomgeving werkt, hiervoor gaan we een klasse maken. Deze klasse zal de basis zijn waarmee we een tabel kunnen maken en records erin kunnen opslaan, dit geeft ons ook de mogelijkheid om geen code te hoeven schrijven SQL rechtstreeks, zodat in de toekomst, wanneer we een andere database-engine moeten gebruiken, eenvoudigweg het wijzigen van de configuratie voldoende zal zijn.
In onze applicatiemap gaan we een bestand maken met de naam liedjes.rb, wat deze klasse moet doen, is de kaart hebben van hoe we een nummer in de database kunnen opslaan, laten we de inhoud bekijken en dan uitleggen wat elke sectie ervan doet:
'dm-core' vereisen 'dm-migrations' DataMapper.setup (: default, "sqlite3: // # {Dir.pwd} /musica.db") klasse Nummers bevatten DataMapper :: Resource-eigenschap: id, Serial-eigenschap: title, String eigenschap: duration, Integer property: release_date, Date end DataMapper.finalizeAllereerst moeten we de vereisen van de belangrijkste componenten van DataMapper in dit geval dm-core Y dm-migraties. Vervolgens maken we een configuratieregel die we in de eerste plaats kunnen gebruiken SQLite om het bestand onmiddellijk aan te maken, in dit geval muziek.dbAls het bestand al bestaat, betekent dit dat de database al bestaat, dus de verbinding zou eenvoudig tot stand worden gebracht.
Eindelijk doen we onze les liedjes die een reeks attributen zal bevatten die het identificeren en de opname van een andere klasse van DataMapper. Hiermee zijn we klaar voor de volgende fase, namelijk het testen van onze applicatie. Omdat we niets hebben gemaakt om in onze browser te zien, is het een goed moment om de Ruby interactieve console (irb), waardoor we kunnen controleren of alles op de goede weg is, en we kunnen ook wennen aan de DataMapper.
Probeer onze app
Allereerst moeten we in onze terminal of console naar de map gaan waar we ons bestand hebben opgeslagen liedjes.rb aangezien dit de sleutel is om ons voorbeeld te ontwikkelen, moeten we daar onze interactieve console starten Robijn door het commando te typen:
irbZodra we ermee beginnen, kunnen we de vereisen van onze klas door het commando te plaatsen:
vereisen "./songs"Dit moet true retourneren als het succesvol is, wat we in de volgende afbeelding kunnen zien.
Volgende handeling moeten we de tool gebruiken auto_migreren van DataMapper, hierdoor kunnen we de tabel maken met de attributen van onze klasse in het bijbehorende databasebestand. Hiervoor schrijven we eenvoudig het volgende:
Nummers.auto_migreren!Wat de nodige structuur creëert om de records te kunnen bewaren.
Maak ons eerste nummer
Wat we nu moeten doen, is het object maken waarmee we de benodigde waarden in de database kunnen opslaan, hiervoor gaan we een object maken met de naam song:
nummer = Nummers.nieuwOm het later op te slaan met het volgende commando:
Dit geeft ons al een basisplatform om de informatie in onze database op te nemen, laten we eens kijken wat de console op dit punt zou moeten laten zien:
Zodra dit is gebeurd, kunnen we de gegevens ervoor opslaan. Terwijl we nog steeds in onze console zijn, gaan we de attributen van ons object één voor één toevoegen, laten we eens kijken:
song.title = “Nieuw nummer” song.duration = “315” song.release_date = Datum.nieuw (2010) song.saveElk van de vorige instructies was opgeslagen in het songobject en voerde de methode uit sparen dit alles wordt opgeslagen in de Database. We zien in de volgende afbeelding het proces dat we hebben uitgevoerd.
We merken ook op dat Robijn het is hoofdlettergevoelig dus we moeten voorzichtig zijn met hoe we onze klassen schrijven, want in het geval van de console was er een fout bij het schrijven van de klasse Datum, sinds Datum is geschreven, wat onmiddellijk werd gedetecteerd. Als we ten slotte de opgeslagen nummers willen raadplegen, volstaat het om de volgende instructie te schrijven:
Songs.allOok kunnen we met het volgende aangeven hoeveel records we hebben.
Nummers.countLaten we tot slot het antwoord bekijken dat in onze console is ontvangen bij het uitvoeren van deze twee opdrachten.
We hebben ons eerste record ingevoegd en met succes geraadpleegd, waardoor we leren hoe we de database kunnen gebruiken met Sinatra, hoewel de meest oplettende misschien besefte dat alles wat we deden in Robijn, en dit was het geweldige idee, om te laten zien hoe weten Robijn we kunnen werken met Sinatra zonder veel complicaties.