Une nouvelle version de Rails approche à grands pas. Pour le moment, aucune date de sortie n’a été confirmée, mais il devrait être disponible avant Noël. Au moment de la publication de cet article, la version la plus récente est la 7.0.0.rc1. HÉ, GitHub, Shopify et Camp de base tous exécutent la version alpha de Rails 7 en production, nous pouvons donc nous attendre à ce que même la version candidate soit stable.
Notre objectif dans cet article est d'examiner certaines des nouvelles fonctionnalités et modifications apportées par Rails 7.
Y a-t-il quelque chose de nouveau dans Ruby on Rails 7 ?
La dernière version de Ruby on Rails contient des fonctionnalités extraordinaires et intéressantes. Selon le créateur de Rails David Hansson, cette version inclut tout ce dont les développeurs ont besoin pour créer une application Web moderne. Cette version est le point culminant de nombreuses années de progrès dans cinq domaines différents à la fois, selon Hanson. Jetons un coup d'œil à ce que Ruby on Rails 7 a à offrir
1. Il n’y a pas besoin de Webpack ou de Node.
Il n'est pas nécessaire que les développeurs disposent de Webpack et Nodejs pour utiliser les packages npm. De nombreuses étapes seraient nécessaires pour traduire ES6 et Babel, puis les regrouper. La gemme Webpacker peut être utilisée pour cette tâche, mais elle apportait un bagage supplémentaire et était difficile à modifier.
La gem importmaps-rails permet désormais aux développeurs d'importer des cartes. Pour mettre à jour, épingler ou désépingler des dépendances, vous pouvez utiliser ./bin/importmap au lieu d'écrire du code pour package.json.
Par exemple, pour installer date-fns :
$ ./bin/importmap pin date-fns
Cela inclura automatiquement une ligne dans config/importmap.rb comme :
dans « date-fns », à : « https://ga.jspm.io/npm:[email protected]/esm/index.js »
Et, dans votre javascript, vous continuez à écrire des codes comme avant.
importer { formatDistance, subDays } depuis 'date-fns'
formatDistance(sous-jours(nouvelle Date(), 3), nouvelle Date(), { addSuffix : true })
//=> "il y a 3 jours"
Lorsque vous travaillez avec cette structure, vous devez garder cela à l’esprit car ce que vous écrivez ne correspond pas à ce que le navigateur perçoit. Étant donné que la plupart des navigateurs prennent désormais en charge ES6, cela ne pose pas de problème. La transformation vers JS n'est requise que pour JSK et Typescript.
Par exemple, les développeurs doivent utiliser webpack, esbuild et rollup s'ils souhaitent utiliser React avec JSX.
Cela peut être fait rapidement avec Rail 7. Avec l'une des stratégies choisies, exécutez simplement la commande suivante :
$ ./bin/rails javascript:install:[esbuild|rollup|webpack]
2. Une couche de base de données chiffrée
Avec Rail 7, les développeurs peuvent chiffrer certains champs de base de données à l'aide de la méthode encrypts sur ActiveRecord :: Base. Vous devez écrire le code suivant après avoir configuré votre configuration initiale :
Message de classe <ApplicationRecord
chiffre:texte
fin
Il n'y a aucune différence entre les attributs chiffrés et les autres attributs. Le framework Rails 7 crypte et déchiffre automatiquement votre base de données et votre application.
Cependant, si vous transmettez l'option deterministic: true à la méthode encrypts, vous ne pouvez pas interroger la base de données du champ. En conséquence, le modèle déterministe est moins sécurisé que les autres modes et n’est donc généralement utilisé qu’en cas d’urgence.
3. Requête asynchrone
La méthode load_async est désormais disponible pour les développeurs lors de l'interrogation de données. Lorsque plusieurs requêtes sont posées ensemble, cela permet de gagner du temps. Vous pouvez exécuter ce qui suit en utilisant ceci :
def PostsController
indice déf
@posts = Post.load_async
@categories = Catégorie.load_async
fin
fin
Deux requêtes seront déclenchées en même temps. En d’autres termes, si chaque requête prenait 200 ms, le temps total pour récupérer deux résultats serait de 200 ms au lieu de 400 ms.
4. Il ne serait possible d'exécuter des applications qu'en mode Zeitwerk.
Le mode Zeitwerk de Rail 7 sera désormais disponible pour toutes les applications. La direction a assuré que cette transformation se déroulerait en douceur pour les développeurs. Actualité du chargeur de code Ruby on Rails. Il permet aux développeurs de charger facilement des modules et des classes de votre projet.
Il est utilisé pour lancer des dépendances de gem, des projets, des applications, etc. Les inflecteurs, les configurations et les enregistreurs sont tous uniques à chaque chargeur. La seule différence entre le mode Zeitwerk et le mode Classique est qu'il offre une meilleure stratégie de chargement.
5. Désormais, Stimulus et Turbolinks remplacent UJS et Turbolinks
Les applications Rails 7 sont désormais livrées par défaut avec Stimulus et Turbo (de Hotwire). Dans Hotwire, le HTML est envoyé via le réseau au lieu du JSON, ce qui permet aux développeurs de créer des applications Web avec un minimum de JavaScript.
En conséquence, les pages se chargent rapidement, les modèles s'exécutent simultanément sur le serveur et les développeurs bénéficient d'une expérience de développement productive. Avec Turbo, vous pouvez accélérer les modifications de page, rationaliser les pages complexes en composants et diffuser les mises à jour via WebSockets.
Hotwire et Turbo sont tous deux des technologies hybrides ; ils peuvent être intégrés aux appareils iOS et Android. Combiné avec Turbo, Stimulus fournit une solution pour créer des applications rapides et convaincantes.
6. Utilisez sole pour intégrer votre requête avec un seul enregistrement
Lorsqu'ils affirment qu'une requête correspond à un seul enregistrement, les développeurs peuvent désormais utiliser first ou find_by au lieu de sole ou find_sole_by.
Produit.where([« prix = % ? », prix]).sole
# => ActiveRecord::RecordNotFound (si aucun produit au prix indiqué)
# => # (si un produit avec un prix donné)
# => ActiveRecord :: SoleRecordExceeded (si plusieurs produits avec un prix donné)
user.api_keys.find_sole_by(clé : clé)
# comme ci-dessus
7. Les fichiers générés par le flux peuvent être gérés par les actions du contrôleur.
En utilisant send_stream dans une action de contrôleur, Rail sur Ruby 7 rationalise les fichiers générés à la volée.
send_stream(nom de fichier : « abonnés.csv ») faire |stream|
stream.write « adresse_e-mail, mise à jour_à\n »
@subscribers.find_each fait |abonné|
stream.write "#{subscriber.email_address},#{subscriber.updated_at}\n"
fin
fin
Une fois déployés sur Heroku, les développeurs recevront une réponse immédiate/partielle afin qu'ils sachent que quelque chose se passe.
8. Variantes avec noms
Ruby on Rails 7 prend en charge les variantes de dénomination à l'aide d'ActiveStorage.
Conclusions
Dans les notes de version de Rails 7, vous pouvez trouver la liste complète des corrections de bogues, des fonctionnalités et des modifications. Pour le moment, ils ne sont pas exhaustifs, mais ils seront bientôt mis à jour.
Veuillez noter que Rails 6.1 ne recevra plus de corrections de bugs si vous utilisez toujours Rails 6 ou une version antérieure avec la version finale de Rails 7. L'EOL pour Rails 5.2 marquera également sa fin de support, puisqu'il ne recevra plus de mises à jour.
amusez-vous à coder ! Contact RailsCarma pour plus d'informations!