En ny version av Rails är precis runt hörnet. För närvarande finns inget bekräftat releasedatum, men det förväntas bli tillgängligt före jul. Från och med publiceringen av detta inlägg är den senaste versionen 7.0.0.rc1. HALLÅ, Github, Shopify och Basläger alla kör Rails 7 alpha i produktion, så vi kan förvänta oss att även releasekandidaten är stabil.
Vårt mål i det här inlägget är att titta på några av de nya funktionerna och förändringarna som Rails 7 kommer att medföra.
Finns det något nytt i Ruby on Rails 7?
Det finns några extraordinära och spännande funktioner i den senaste Ruby on Rails-versionen. Enligt Rails skapare David Hansson, den här versionen innehåller allt som utvecklare behöver för att skapa en modern webbapplikation. Den här releasen är kulmen på många års framsteg inom fem olika områden samtidigt, enligt Hanson. Låt oss ta en titt på vad Ruby on Rails 7 har att erbjuda
1. Det finns inget behov av Webpack eller Node.
Det är inte nödvändigt för utvecklare att ha Webpack och Nodejs för att använda npm-paket. Många steg skulle krävas för att översätta ES6 och Babel och sedan bunta ihop dem. Webpacker pärla kan användas för denna uppgift, men det gav extra bagage och var svårt att modifiera.
Importmaps-rails pärla tillåter nu utvecklare att importera kartor. För att uppdatera, fästa eller lossa beroenden kan du använda ./bin/importmap istället för att skriva kod för package.json.
Till exempel - för att installera date-fns:
$ ./bin/importmap pin date-fns
Detta kommer automatiskt att inkludera en rad i config/importmap.rb som:
i "date-fns", till: "https://ga.jspm.io/npm:[email protected]/esm/index.js"
Och i ditt javascript fortsätter du att skriva koder som du brukade.
importera { formatDistance, subDays } från 'date-fns'
formatDistance(subDays(new Date(), 3), new Date(), { addSuffix: true })
//=> "3 dagar sedan"
När du arbetar med den här strukturen måste du ha detta i åtanke eftersom det du skriver inte överensstämmer med vad webbläsaren uppfattar. Eftersom de flesta webbläsare nu stöder ES6 är detta inget problem. Transformation till JS krävs endast för JSK och Typescript.
Till exempel måste utvecklare använda webpack, esbuild och rollup om de vill använda React med JSX.
Detta kan göras snabbt med Rail 7. Med någon av de valda strategierna, kör helt enkelt följande kommando:
$ ./bin/rails javascript:install:[esbuild|rollup|webpack]
2. Ett databaslager som är krypterat
Med Rail 7 kan utvecklare kryptera vissa databasfält med krypteringsmetoden på ActiveRecord::Base. Du måste skriva följande kod efter att du har ställt in din första installation:
klass Meddelande < ApplicationRecord
krypterar:text
slutet
Det finns ingen skillnad mellan krypterade attribut och andra attribut. Rails 7-ramverket krypterar och dekrypterar automatiskt din databas och applikation.
Men om du skickar alternativet deterministic: true till encrypts-metoden kan du inte fråga i fältets databas. Som ett resultat är den deterministiska modellen mindre säker än andra lägen, så den används vanligtvis endast i nödsituationer.
3. Asynkron sökning
Metoden load_async är nu tillgänglig för utvecklare när de söker efter data. När flera frågor ställs samtidigt är detta tidsbesparande. Du kan köra följande med detta:
def PostsController
def index
@posts = Post.load_async
@categories = Category.load_async
slutet
slutet
Två frågor kommer att skickas samtidigt. Med andra ord, om varje fråga tog 200 ms skulle den totala tiden för att hämta två resultat vara 200 ms istället för 400 ms.
4. Det skulle bara vara möjligt att köra applikationer i Zeitwerk-läge.
Zeitwerk-läget för Rail 7 kommer nu att vara tillgängligt för alla applikationer. Det har säkerställts av ledningen att denna omvandling kommer att vara smidig för utvecklarna. Ruby on Rails kodlastare Zeitwerk. Det låter utvecklare enkelt ladda moduler och klasser från ditt projekt.
Den används för att starta ädelstensberoenden, projekt, applikationer, etc. Inflektorer, konfigurationer och loggare är alla unika för varje laddare. Den enda skillnaden mellan Zeitwerk och Classic-läget är att det ger en bättre laddningsstrategi.
5. Nu ersätter Stimulus och Turbolinks UJS och Turbolinks
Rails 7-applikationer kommer nu med Stimulus och Turbo (från Hotwire) som standard. I Hotwire skickas HTML över tråden istället för JSON, vilket gör det möjligt för utvecklare att bygga webbapplikationer med minimalt JavaScript.
Som ett resultat laddas sidor snabbt, mallar körs samtidigt på servern och utvecklare har en produktiv utvecklingsupplevelse. Med Turbo kan du snabba upp sidändringar, effektivisera komplexa sidor till komponenter och strömma uppdateringar över WebSockets.
Hotwire och Turbo är båda hybridteknologier; de kan integreras i iOS- och Android-enheter. I kombination med Turbo ger Stimulus en lösning för att bygga snabba och övertygande applikationer.
6. Använd sole för att infoga din fråga med en enda post
När man hävdar att en fråga matchar en enskild post kan utvecklare nu använda first eller find_by istället för sole eller find_sole_by.
Product.where(["pris = %?", pris]).sula
# => ActiveRecord::RecordNotFound (om ingen produkt med angivet pris)
# => # (om en produkt med angivet pris)
# => ActiveRecord::SoleRecordExceeded (om mer än en produkt med angivet pris)
user.api_keys.find_sole_by(nyckel: nyckel)
# enligt ovan
7. Strömgenererade filer kan hanteras av kontrollernas åtgärder.
Genom att använda send_stream i en kontrollåtgärd, effektiviserar Rail on Ruby 7 filer som genereras i farten.
send_stream(filnamn: “subscribers.csv”) gör |stream|
stream.write "email_address,updated_at\n"
@subscribers.find_each gör |prenumerant|
stream.write "#{subscriber.email_address},#{subscriber.updated_at}\n"
slutet
slutet
När de distribueras på Heroku kommer utvecklare att få ett omedelbart/delvis svar så att de vet att något händer.
8. Varianter med namn
Ruby on Rails 7 stöder namngivningsvarianter med ActiveStorage.
Slutsatser
I Rails 7 release notes kan du hitta den kompletta listan över buggfixar, funktioner och ändringar. För närvarande är de inte heltäckande, men de kommer att uppdateras snart.
Observera att Rails 6.1 inte längre kommer att ta emot buggfixar om du fortfarande kör Rails 6 eller lägre med Rails 7:s slutliga utgåva. EOL for Rails 5.2 kommer också att markera sitt slut på stödet, eftersom det inte längre kommer att få några uppdateringar.
ha kul med kodning! Kontakt RailsCarma för mer information!