URL:     https://linuxfr.org/news/sortie-de-ruby-on-rails-7-0
Title:   Sortie de Ruby on Rails 7.0
Authors: Thomas J.
        Benoît Sibaud et palm123
Date:    2021-12-23T12:07:31+01:00
License: CC By-SA
Tags:    ruby_on_rails, rails, ruby, framework et cadriciel
Score:   7


La version 7.0 du cadriciel Ruby on Rails a fait son apparition le 15 décembre 2021.

Pour rappel, Rails est un framework web complet développé en Ruby qui encourage la lisibilité du code, tout en privilégiant les conventions à la configuration.
Il fait la part belle à l'architecture [Modèle-Vue-Contrôleur (MVC)](https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur) et s’appuie sur un certain nombre de sous-ensembles :


- **Active Model** qui permet de créer des objets Ruby suivant un [mapping objet-relationnel (ORM)](https://fr.wikipedia.org/wiki/Mapping_objet-relationnel)
- **Action View** qui est responsable de la génération des pages HTML
- **Action Controller** qui gère le cycle de vie des requêtes de l'application (cela inclut les sessions, les filtres, les cookies, le streaming de données et le traitement des exceptions)
- **Action Pack** qui traite les requêtes web tout en fournissant la couche de contrôle MVC
- **Active Record** qui permet aux modèles d'interagir avec la base de données de l'application
- **Action Cable** qui permet d'écrire des fonctionnalités temps réel grâce au protocole WebSocket
- **Action Mailbox** qui permet de recevoir des mails dans une application
- **Action Mailer** qui permet d'envoyer des mails depuis une application
- **Action Text** qui fournit tout qu'il faut pour gérer du contenu incluant du texte enrichi
- **Active Job** qui permet d'exécuter des travaux en arrière-plan selon différentes approches de mise en file d'attente
- **Active Storage** qui facilite le téléversement de fichiers vers un service de stockage dans les nuages, la transformation et l'extraction de métadonnées
- **Active Support** qui fournit un certain nombre d'extensions au langage Ruby

Vous avez forcement croisé un site utilisant ce cadriciel : GitHub, Twitch, Airbnb, Kickstarter ou encore LinuxFr.org !

----

[Site web](https://rubyonrails.org/)
[Guide](https://guides.rubyonrails.org/)
[Construire et déployer un blog en 34 minutes](https://d1snj8sshb5u7m.cloudfront.net/Rails7.mp4)
[Code source de ce blog](https://github.com/tjustino/rails7_demo)

----

Une toute nouvelle approche du JavaScript
=========================================
Allant à l'encontre de la mode des [applications web monopage](https://fr.wikipedia.org/wiki/Application_web_monopage) et du _tout [Node.js](https://fr.wikipedia.org/wiki/Node.js)_, cette version de Rails offre plusieurs possibilités :


- construire des applications dynamiques en minimisant l'utilisation du JavaScript et en favorisant le HTML au lieu du JSON. Cette approche est possible grâce à la nouvelle bibliothèque [Hotwire](https://hotwired.dev/)
- l'import de modules JavaScript au travers des fichiers versionnés, directement à partir du navigateur grâce à [Import maps](https://github.com/WICG/import-maps)
- il est maintenant possible d'utiliser n'importe quel bundler JavaScript, comme [esbuild](https://esbuild.github.io/), [rollup.js](https://www.rollupjs.org) ou le plus classique [Webpack](https://webpack.js.org/), grâce à la nouvelle gem  [jsbundling-rails](https://github.com/rails/jsbundling-rails)
- suivant la même approche pour le CSS, la gem [cssbundling-rails](https://github.com/rails/cssbundling-rails) permet dorénavant de compiler facilement sa feuille de style en intégrant [Tailwind CSS](https://tailwindcss.com/), [Sass](https://sass-lang.com/dart-sass) ou encore [PostCSS](https://postcss.org/)



Attributs chiffrés avec Active Record
=====================================
Il est maintenant possible de déclarer des attributs pour chiffrer certaines données au niveau du modèle :


```ruby
# app/models/article.rb
class Article < ApplicationRecord
 encrypts :title
end

# Article.create! title: "Sortie de Ruby on Rails 7.0"
# INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DeaE[...]1/YjMHbHD4talgF9dt61A==\"}}')
```



Le chiffrement se fait de manière transparente avant l'enregistrement en base de données.



Chargement asynchrone des requêtes
==================================
Lorsqu'une action du contrôleur doit exécuter plusieurs requêtes, il est maintenant possible de le faire simultanément grâce à _Relation#load_async_.
Jusqu'à présent, exécuter trois requêtes durant 100 ms chacune nécessitait 300 ms. Maintenant, il est possible de le faire en parallèle.



Zeitwerk par défaut
===================
Le chargement automatique dans Rails a toujours été synonyme d'élégance.
L'ancienne approche, qui s'accompagnait d'une série de bizarreries et de fonctionnalités manquantes, a finalement été remplacée exclusivement par le [chargeur de code Zeitwerk](https://github.com/fxn/zeitwerk#introduction).



Et la dette technique de LinuxFr.org dans tout ça ?
===============================================
On ne va pas se mentir : les montées de version majeure de Rails ne sont pas facile à appliquer si l'on souhaite utiliser les dernières fonctionnalités.
Au moment où j'écris, [la version propulsant ces quelques lignes](https://github.com/linuxfrorg/linuxfr.org/blob/377636a1369226b77aec48bfea81179223f6dd77/Gemfile#L8) recevra des [correctifs de sécurité majeurs jusqu'au 1er juin 2022](https://guides.rubyonrails.org/maintenance_policy.html#severe-security-issues).
Vous l'aurez compris : il nous reste encore 6 mois pour procrastiner tranquillement !