edge
Plus sur rubyonrails.org: Plus de Ruby on Rails

Ruby on Rails 5.0 Notes de version

Points forts de Rails 5.0 :

Ces notes de version ne couvrent que les changements majeurs. Pour en savoir plus sur les corrections de bugs et les changements divers, veuillez consulter les journaux des modifications ou consulter la liste des commits dans le référentiel principal de Rails sur GitHub.

1 Mise à niveau vers Rails 5.0

Si vous mettez à niveau une application existante, il est conseillé d'avoir une bonne couverture de tests avant de commencer. Vous devriez également d'abord passer à Rails 4.2 au cas où vous ne l'auriez pas déjà fait et vous assurer que votre application fonctionne toujours comme prévu avant de tenter une mise à jour vers Rails 5.0. Une liste de choses à surveiller lors de la mise à niveau est disponible dans le guide Mise à niveau de Ruby on Rails.

2 Fonctionnalités majeures

2.1 Action Cable

Action Cable est un nouveau framework dans Rails 5. Il intègre de manière transparente les WebSockets avec le reste de votre application Rails.

Action Cable permet d'écrire des fonctionnalités en temps réel en Ruby dans le même style et la même forme que le reste de votre application Rails, tout en étant performant et scalable. C'est une offre complète qui fournit à la fois un framework JavaScript côté client et un framework Ruby côté serveur. Vous avez accès à votre modèle de domaine complet écrit avec Active Record ou votre ORM de choix.

Consultez le guide Présentation d'Action Cable pour plus d'informations.

2.2 Applications API

Rails peut maintenant être utilisé pour créer des applications API allégées. Cela est utile pour créer et servir des API similaires à celles de Twitter ou de l'API GitHub, qui peuvent être utilisées pour des applications publiques ainsi que pour des applications personnalisées.

Vous pouvez générer une nouvelle application Rails API en utilisant la commande :

$ rails new my_api --api

Cela fera trois choses principales :

  • Configurer votre application pour démarrer avec un ensemble de middleware plus limité que d'habitude. Plus précisément, il n'inclura pas par défaut de middleware principalement utile pour les applications de navigateur (comme la prise en charge des cookies).
  • Faire en sorte que ApplicationController hérite de ActionController::API au lieu de ActionController::Base. Comme pour le middleware, cela exclura tous les modules Action Controller qui fournissent des fonctionnalités principalement utilisées par les applications de navigateur.
  • Configurer les générateurs pour ignorer la génération de vues, d'aides et de ressources lors de la génération d'une nouvelle ressource.

L'application fournit une base pour les API, qui peuvent ensuite être configurées pour intégrer des fonctionnalités adaptées aux besoins de l'application.

Consultez le guide Utiliser Rails pour les applications API uniquement pour plus d'informations.

2.3 API des attributs Active Record

Définit un attribut avec un type sur un modèle. Il remplacera le type des attributs existants si nécessaire. Cela permet de contrôler la façon dont les valeurs sont converties en SQL et vice versa lorsqu'elles sont assignées à un modèle. Cela modifie également le comportement des valeurs passées à ActiveRecord::Base.where, ce qui nous permet d'utiliser nos objets de domaine dans une grande partie d'Active Record, sans avoir à dépendre des détails de l'implémentation ou à utiliser des patchs.

Voici quelques choses que vous pouvez réaliser avec cela :

  • Le type détecté par Active Record peut être remplacé.
  • Une valeur par défaut peut également être fournie.
  • Les attributs n'ont pas besoin d'être soutenus par une colonne de base de données.
# db/schema.rb
create_table :store_listings, force: true do |t|
  t.decimal :price_in_cents
  t.string :my_string, default: "original default"
end
# app/models/store_listing.rb
class StoreListing < ActiveRecord::Base
end
store_listing = StoreListing.new(price_in_cents: '10.1')

# avant
store_listing.price_in_cents # => BigDecimal.new(10.1)
StoreListing.new.my_string # => "original default"

class StoreListing < ActiveRecord::Base
  attribute :price_in_cents, :integer # type personnalisé
  attribute :my_string, :string, default: "new default" # valeur par défaut
  attribute :my_default_proc, :datetime, default: -> { Time.now } # valeur par défaut
  attribute :field_without_db_column, :integer, array: true
end

# après
store_listing.price_in_cents # => 10
StoreListing.new.my_string # => "new default"
StoreListing.new.my_default_proc # => 2015-05-30 11:04:48 -0600
model = StoreListing.new(field_without_db_column: ["1", "2", "3"])
model.attributes # => {field_without_db_column: [1, 2, 3]}

Création de types personnalisés:

Vous pouvez définir vos propres types personnalisés, tant qu'ils répondent aux méthodes définies sur le type de valeur. La méthode deserialize ou cast sera appelée sur votre objet de type, avec une entrée brute provenant de la base de données ou de vos contrôleurs. Cela est utile, par exemple, lors de la conversion personnalisée, comme les données Money.

Interrogation:

Lorsque ActiveRecord::Base.where est appelé, il utilisera le type défini par la classe modèle pour convertir la valeur en SQL, en appelant serialize sur votre objet de type.

Cela donne aux objets la capacité de spécifier comment convertir les valeurs lors de l'exécution de requêtes SQL.

Suivi des modifications:

Le type d'un attribut est autorisé à modifier la façon dont le suivi des modifications est effectué.

Consultez sa documentation pour plus de détails.

2.4 Test Runner

Un nouveau test runner a été introduit pour améliorer les capacités d'exécution des tests dans Rails. Pour utiliser ce test runner, tapez simplement bin/rails test.

Le Test Runner s'inspire de RSpec, minitest-reporters, maxitest et d'autres. Il inclut certaines de ces avancées notables :

  • Exécute un seul test en utilisant le numéro de ligne du test.
  • Exécute plusieurs tests en indiquant le numéro de ligne des tests.
  • Amélioration des messages d'échec, qui facilitent également la réexécution des tests échoués.
  • Arrêt rapide en utilisant l'option -f, pour arrêter immédiatement les tests en cas d'échec, au lieu d'attendre la fin de la suite.
  • Reporte la sortie des tests jusqu'à la fin de l'exécution complète des tests en utilisant l'option -d.
  • Affiche la trace complète des exceptions en utilisant l'option -b.
  • Intégration avec minitest pour permettre des options comme -s pour les données de test seed, -n pour exécuter un test spécifique par nom, -v pour une sortie verbeuse améliorée, etc.
  • Sortie colorée des tests.

3 Railties

Veuillez vous référer au Changelog pour des changements détaillés.

3.1 Suppressions

  • Suppression de la prise en charge du débogueur, utilisez plutôt byebug. debugger n'est pas pris en charge par Ruby 2.2. (commit)
  • Suppression des tâches obsolètes test:all et test:all:db. (commit)

  • Suppression de Rails::Rack::LogTailer obsolète. (commit)

  • Suppression de la constante RAILS_CACHE obsolète. (commit)

  • Suppression de la configuration serve_static_assets obsolète. (commit)

  • Suppression des tâches de documentation doc:app, doc:rails et doc:guides. (commit)

  • Suppression du middleware Rack::ContentLength de la pile par défaut. (Commit)

3.2 Dépréciations

  • config.static_cache_control est déprécié au profit de config.public_file_server.headers. (Pull Request)

  • config.serve_static_files est déprécié au profit de config.public_file_server.enabled. (Pull Request)

  • Les tâches de l'espace de noms rails sont dépréciées au profit de l'espace de noms app. (par exemple, les tâches rails:update et rails:template sont renommées app:update et app:template.) (Pull Request)

3.3 Changements notables

  • Ajout de l'exécuteur de tests Rails bin/rails test. (Pull Request)

  • Les nouvelles applications et plugins générés obtiennent un fichier README.md en Markdown. (commit, Pull Request)

  • Ajout de la tâche bin/rails restart pour redémarrer votre application Rails en touchant tmp/restart.txt. (Pull Request)

  • Ajout de la tâche bin/rails initializers pour afficher tous les initializers définis dans l'ordre où ils sont invoqués par Rails. (Pull Request)

  • Ajout de la tâche bin/rails dev:cache pour activer ou désactiver le cache en mode développement. (Pull Request)

  • Ajout du script bin/update pour mettre à jour l'environnement de développement automatiquement. (Pull Request)

  • Proxy des tâches Rake via bin/rails. (Pull Request, Pull Request)

  • Les nouvelles applications sont générées avec le moniteur de système de fichiers événementiel activé sur Linux et macOS. Cette fonctionnalité peut être désactivée en passant --skip-listen au générateur. (commit, commit)

  • Génération d'applications avec une option pour enregistrer les journaux sur STDOUT en production en utilisant la variable d'environnement RAILS_LOG_TO_STDOUT. (Pull Request)

  • Activation de HSTS avec l'en-tête IncludeSubdomains pour les nouvelles applications. (Pull Request)

  • Le générateur d'application écrit un nouveau fichier config/spring.rb, qui indique à Spring de surveiller des fichiers communs supplémentaires. (commit)

  • Ajout de --skip-action-mailer pour ignorer Action Mailer lors de la génération d'une nouvelle application. (Pull Request)

  • Suppression du répertoire tmp/sessions et de la tâche rake de nettoyage associée. (Pull Request)

  • Modification de _form.html.erb généré par le générateur de scaffold pour utiliser des variables locales. (Pull Request)

  • Désactivation du chargement automatique des classes en environnement de production. (commit)

4 Action Pack

Veuillez vous référer au journal des modifications pour des détails sur les changements.

4.1 Suppressions

  • Suppression de ActionDispatch::Request::Utils.deep_munge. (commit)

  • Suppression de ActionController::HideActions. (Pull Request)

  • Suppression des méthodes de substitution respond_to et respond_with, cette fonctionnalité a été extraite dans la gemme responders. (commit)

  • Suppression des fichiers d'assertion obsolètes. (commit)

  • Suppression de l'utilisation obsolète de clés de chaîne dans les aides d'URL. (commit)

  • Suppression de l'option obsolète only_path sur les aides *_path. (commit)

  • Suppression de l'option obsolète NamedRouteCollection#helpers. (commit)

  • Suppression du support obsolète pour définir des routes avec l'option :to qui ne contient pas #. (commit)

  • Suppression de ActionDispatch::Response#to_ary obsolète. (commit)

  • Suppression de ActionDispatch::Request#deep_munge obsolète. (commit)

  • Suppression de ActionDispatch::Http::Parameters#symbolized_path_parameters obsolète. (commit)

  • Suppression de l'option obsolète use_route dans les tests de contrôleur. (commit)

  • Suppression de assigns et assert_template. Les deux méthodes ont été extraites dans la gemme rails-controller-testing. (Pull Request)

4.2 Dépréciations

  • Dépréciation de tous les rappels *_filter au profit des rappels *_action. (Pull Request)

  • Dépréciation des méthodes de test d'intégration *_via_redirect. Utilisez follow_redirect! manuellement après l'appel de la requête pour le même comportement. (Pull Request)

  • Dépréciation de AbstractController#skip_action_callback au profit de méthodes de saut de rappel individuelles. (Pull Request)

  • Dépréciation de l'option :nothing pour la méthode render. (Pull Request)

  • Dépréciation du passage du premier paramètre en tant que Hash et du code d'état par défaut pour la méthode head. (Pull Request)

  • Dépréciation de l'utilisation de chaînes ou de symboles pour les noms de classe de middleware. Utilisez plutôt les noms de classe. (commit)

  • Dépréciation de l'accès aux types MIME via des constantes (par exemple, Mime::HTML). Utilisez l'opérateur de crochet avec un symbole à la place (par exemple, Mime[:html]). (Pull Request)

  • Dépréciation de redirect_to :back au profit de redirect_back, qui accepte un argument fallback_location requis, éliminant ainsi la possibilité d'une RedirectBackError. (Pull Request)

  • ActionDispatch::IntegrationTest et ActionController::TestCase déprécient les arguments positionnels au profit des arguments nommés. (Pull Request)

  • Dépréciation des paramètres de chemin :controller et :action. (Pull Request)

  • Dépréciation de la méthode env sur les instances de contrôleur. (commit)

  • ActionDispatch::ParamsParser est déprécié et a été supprimé de la pile de middleware. Pour configurer les analyseurs de paramètres, utilisez ActionDispatch::Request.parameter_parsers=. (commit, commit)

    Changements notables

  • Ajout de ActionController::Renderer pour rendre des templates arbitraires en dehors des actions du contrôleur. (Demande d'extraction)

  • Migration vers la syntaxe des arguments de mots-clés dans ActionController::TestCase et les méthodes de requête HTTP de ActionDispatch::Integration. (Demande d'extraction)

  • Ajout de http_cache_forever à Action Controller, afin de pouvoir mettre en cache une réponse qui ne s'expire jamais. (Demande d'extraction)

  • Fournir un accès plus convivial aux variantes de requête. (Demande d'extraction)

  • Pour les actions sans templates correspondants, rendre head :no_content au lieu de lever une erreur. (Demande d'extraction)

  • Ajout de la possibilité de substituer le constructeur de formulaire par défaut pour un contrôleur. (Demande d'extraction)

  • Ajout de la prise en charge des applications API-only. ActionController::API est ajouté en remplacement de ActionController::Base pour ce type d'applications. (Demande d'extraction)

  • ActionController::Parameters n'hérite plus de HashWithIndifferentAccess. (Demande d'extraction)

  • Rendre plus facile l'activation de config.force_ssl et config.ssl_options en les rendant moins dangereux à essayer et plus faciles à désactiver. (Demande d'extraction)

  • Ajout de la possibilité de retourner des en-têtes arbitraires à ActionDispatch::Static. (Demande d'extraction)

  • Modification de la valeur par défaut de préfixe de protect_from_forgery à false. (commit)

  • ActionController::TestCase sera déplacé dans son propre gemme dans Rails 5.1. Utilisez ActionDispatch::IntegrationTest à la place. (commit)

  • Rails génère des ETags faibles par défaut. (Demande d'extraction)

  • Les actions du contrôleur sans appel explicite à render et sans templates correspondants rendront implicitement head :no_content au lieu de lever une erreur. (Demande d'extraction 1, 2)

  • Ajout d'une option pour les jetons CSRF par formulaire. (Demande d'extraction)

  • Ajout de l'encodage de la requête et de l'analyse de la réponse aux tests d'intégration. (Demande d'extraction)

  • Ajout de ActionController#helpers pour accéder au contexte de la vue au niveau du contrôleur. (Demande d'extraction)

  • Les messages flash supprimés sont retirés avant d'être stockés dans la session. (Demande d'extraction)

  • Ajout de la prise en charge du passage d'une collection d'enregistrements à fresh_when et stale?. (Demande d'extraction)

  • ActionController::Live est devenu un ActiveSupport::Concern. Cela signifie qu'il ne peut pas être simplement inclus dans d'autres modules sans les étendre avec ActiveSupport::Concern ou ActionController::Live n'aura pas d'effet en production. Certaines personnes peuvent également utiliser un autre module pour inclure un code de gestion des échecs d'authentification Warden/Devise spécial car le middleware ne peut pas intercepter un :warden lancé par un thread enfant, ce qui est le cas lors de l'utilisation de ActionController::Live. (Plus de détails dans ce problème)

  • Introduire Response#strong_etag= et #weak_etag= ainsi que des options analogues pour fresh_when et stale?. (Demande de tirage)

5 Action View

Veuillez vous référer au Changelog pour des changements détaillés.

5.1 Suppressions

  • Suppression de AbstractController::Base::parent_prefixes obsolète. (commit)

  • Suppression de ActionView::Helpers::RecordTagHelper, cette fonctionnalité a été extraite dans le gemme record_tag_helper. (Demande de tirage)

  • Suppression de l'option :rescue_format pour l'aide translate car elle n'est plus prise en charge par I18n. (Demande de tirage)

5.2 Changements notables

  • Changement du gestionnaire de modèle par défaut de ERB à Raw. (commit)

  • Le rendu de collection peut mettre en cache et récupérer plusieurs partiels à la fois. (Demande de tirage, commit)

  • Ajout de la correspondance générique aux dépendances explicites. (Demande de tirage)

  • Faire de disable_with le comportement par défaut pour les balises de soumission. Désactive le bouton lors de la soumission pour éviter les soumissions multiples. (Demande de tirage)

  • Le nom du modèle partiel n'a plus besoin d'être un identifiant Ruby valide. (commit)

  • L'aide datetime_tag génère maintenant une balise d'entrée avec le type datetime-local. (Demande de tirage)

  • Autoriser les blocs lors du rendu avec l'aide render partial:. (Demande de tirage)

6 Action Mailer

Veuillez vous référer au Changelog pour des changements détaillés.

6.1 Suppressions

  • Suppression des aides *_path obsolètes dans les vues des emails. (commit)

  • Suppression des méthodes deliver et deliver! obsolètes. (commit)

6.2 Changements notables

  • La recherche de modèle respecte désormais la langue par défaut et les fallbacks de I18n. (commit)

  • Ajout du suffixe _mailer aux mailers créés via le générateur, suivant la même convention de nommage utilisée dans les contrôleurs et les jobs. (Demande de tirage)

  • Ajout de assert_enqueued_emails et assert_no_enqueued_emails. (Demande de tirage)

  • Ajout de la configuration config.action_mailer.deliver_later_queue_name pour définir le nom de la file d'attente du mailer. (Demande de tirage)

  • Ajout de la prise en charge de la mise en cache de fragments dans les vues d'Action Mailer. Ajout de la nouvelle option de configuration config.action_mailer.perform_caching pour déterminer si vos modèles doivent effectuer une mise en cache ou non. (Demande de tirage)

7 Active Record

Veuillez vous référer au Changelog pour des changements détaillés.

7.1 Suppressions

  • Suppression du comportement obsolète permettant de passer des tableaux imbriqués en tant que valeurs de requête. (Demande de tirage)

  • Suppression de ActiveRecord::Tasks::DatabaseTasks#load_schema obsolète. Cette méthode a été remplacée par ActiveRecord::Tasks::DatabaseTasks#load_schema_for. (commit)

  • Suppression de serialized_attributes obsolète. (commit)

  • Suppression des caches automatiques obsolètes sur has_many :through. (commit)

  • Suppression de sanitize_sql_hash_for_conditions obsolète. (commit)

  • Suppression de Reflection#source_macro obsolète. (commit)

  • Suppression de symbolized_base_class et symbolized_sti_name obsolètes. (commit)

  • Suppression de ActiveRecord::Base.disable_implicit_join_references=. (commit)

  • Suppression de l'accès obsolète à la spécification de connexion en utilisant un accesseur de chaîne. (commit)

  • Suppression du support obsolète pour le préchargement des associations dépendantes de l'instance. (commit)

  • Suppression du support obsolète pour les plages PostgreSQL avec des bornes inférieures exclusives. (commit)

  • Suppression de l'obsolescence lors de la modification d'une relation avec Arel mis en cache. Cela génère une erreur ImmutableRelation à la place. (commit)

  • Suppression de ActiveRecord::Serialization::XmlSerializer du noyau. Cette fonctionnalité a été extraite dans le gemme activemodel-serializers-xml. (Pull Request)

  • Suppression du support de l'adaptateur de base de données mysql obsolète du noyau. La plupart des utilisateurs devraient pouvoir utiliser mysql2. Il sera converti en un gemme séparé lorsque nous trouverons quelqu'un pour le maintenir. (Pull Request 1, Pull Request 2)

  • Suppression du support pour le gemme protected_attributes. (commit)

  • Suppression du support pour les versions de PostgreSQL inférieures à 9.1. (Pull Request)

  • Suppression du support pour le gemme activerecord-deprecated_finders. (commit)

  • Suppression de la constante ActiveRecord::ConnectionAdapters::Column::TRUE_VALUES. (commit)

7.2 Obsolescences

  • Obsolescence du passage d'une classe en tant que valeur dans une requête. Les utilisateurs devraient passer des chaînes à la place. (Pull Request)

  • Obsolescence du retour de false comme moyen d'arrêter les chaînes de rappel d'Active Record. La méthode recommandée est de throw(:abort). (Pull Request)

  • Obsolescence de ActiveRecord::Base.errors_in_transactional_callbacks=. (commit)

  • Obsolescence de l'utilisation de Relation#uniq, utiliser Relation#distinct à la place. (commit)

  • Obsolescence du type PostgreSQL :point au profit d'un nouveau qui renverra des objets Point au lieu d'un Array. (Pull Request)

  • Obsolescence du rechargement forcé de l'association en passant un argument vrai à la méthode d'association. (Pull Request)

  • Obsolescence des clés pour les erreurs d'association restrict_dependent_destroy au profit de nouveaux noms de clés. (Pull Request)

  • Synchronisation du comportement de #tables. (Pull Request)

  • Obsolescence de SchemaCache#tables, SchemaCache#table_exists? et SchemaCache#clear_table_cache! au profit de leurs nouvelles sources de données homologues. (Pull Request)

  • Obsolète connection.tables sur les adaptateurs SQLite3 et MySQL. (Pull Request)

  • Obsolète le passage d'arguments à #tables - la méthode #tables de certains adaptateurs (mysql2, sqlite3) renverrait à la fois des tables et des vues tandis que d'autres (postgresql) ne renvoient que des tables. Pour rendre leur comportement cohérent, #tables ne renverra que des tables à l'avenir. (Pull Request)

  • Obsolète table_exists? - La méthode #table_exists? vérifierait à la fois les tables et les vues. Pour rendre leur comportement cohérent avec #tables, #table_exists? vérifiera uniquement les tables à l'avenir. (Pull Request)

  • Déprécation de l'envoi de l'argument offset à find_nth. Veuillez utiliser la méthode offset sur la relation à la place. (Pull Request)

  • Obsolète {insert|update|delete}_sql dans DatabaseStatements. Utilisez les méthodes publiques {insert|update|delete} à la place. (Pull Request)

  • Obsolète use_transactional_fixtures au profit de use_transactional_tests pour plus de clarté. (Pull Request)

  • Obsolète le passage d'une colonne à ActiveRecord::Connection#quote. (commit)

  • Ajout d'une option end à find_in_batches qui complète le paramètre start pour spécifier où arrêter le traitement par lots. (Pull Request)

7.3 Changements notables

  • Ajout d'une option foreign_key à references lors de la création de la table. (commit)

  • Nouvelle API d'attributs. (commit)

  • Ajout des options :_prefix/:_suffix à la définition de enum. (Pull Request, Pull Request)

  • Ajout de #cache_key à ActiveRecord::Relation. (Pull Request)

  • Modification de la valeur par défaut de null pour timestamps à false. (commit)

  • Ajout de ActiveRecord::SecureToken pour encapsuler la génération de jetons uniques pour les attributs d'un modèle en utilisant SecureRandom. (Pull Request)

  • Ajout de l'option :if_exists pour drop_table. (Pull Request)

  • Ajout de ActiveRecord::Base#accessed_fields, qui peut être utilisé pour rapidement découvrir quels champs ont été lus à partir d'un modèle lorsque vous cherchez à sélectionner uniquement les données dont vous avez besoin dans la base de données. (commit)

  • Ajout de la méthode #or sur ActiveRecord::Relation, permettant d'utiliser l'opérateur OR pour combiner des clauses WHERE ou HAVING. (commit)

  • Ajout de ActiveRecord::Base.suppress pour empêcher l'enregistrement du receveur pendant le bloc donné. (Pull Request)

  • belongs_to déclenchera désormais une erreur de validation par défaut si l' association n'est pas présente. Vous pouvez désactiver cela pour chaque association avec optional: true. Déprécation également de l'option required au profit de optional pour belongs_to. (Pull Request)

  • Ajout de config.active_record.dump_schemas pour configurer le comportement de db:structure:dump. (Pull Request)

  • Ajout de l'option config.active_record.warn_on_records_fetched_greater_than. (Pull Request)

  • Ajout d'une prise en charge native du type de données JSON dans MySQL. (Pull Request)

  • Ajout de la prise en charge de la suppression d'index de manière concurrente dans PostgreSQL. (Pull Request)

  • Ajout des méthodes #views et #view_exists? sur les adaptateurs de connexion. (Pull Request)

  • Ajout de ActiveRecord::Base.ignored_columns pour rendre certaines colonnes invisibles pour Active Record. (Pull Request)

  • Ajout de connection.data_sources et connection.data_source_exists?. Ces méthodes déterminent quelles relations peuvent être utilisées pour soutenir les modèles Active Record (généralement des tables et des vues). (Pull Request)

  • Autoriser les fichiers de fixtures à définir la classe de modèle dans le fichier YAML lui-même. (Pull Request)

  • Ajout de la possibilité de définir uuid comme clé primaire par défaut lors de la génération de migrations de base de données. (Pull Request)

  • Ajout de ActiveRecord::Relation#left_joins et ActiveRecord::Relation#left_outer_joins. (Pull Request)

  • Ajout des rappels after_{create,update,delete}_commit. (Pull Request)

  • Versionner l'API présentée aux classes de migration, afin de pouvoir modifier les valeurs par défaut des paramètres sans casser les migrations existantes ou les forcer à être réécrites via un cycle de dépréciation. (Pull Request)

  • ApplicationRecord est une nouvelle superclasse pour tous les modèles d'application, analogue aux contrôleurs d'application qui héritent de ApplicationController au lieu de ActionController::Base. Cela permet aux applications de configurer le comportement des modèles à l'échelle de l'application en un seul endroit. (Pull Request)

  • Ajout des méthodes ActiveRecord #second_to_last et #third_to_last. (Pull Request)

  • Ajout de la possibilité d'annoter les objets de base de données (tables, colonnes, index) avec des commentaires stockés dans les métadonnées de la base de données pour PostgreSQL et MySQL. (Pull Request)

  • Ajout de la prise en charge des instructions préparées pour l'adaptateur mysql2, pour mysql2 0.4.4+. Auparavant, cela était uniquement pris en charge par l'adaptateur hérité mysql obsolète. Pour l'activer, définissez prepared_statements: true dans config/database.yml. (Pull Request)

  • Ajout de la possibilité d'appeler ActionRecord::Relation#update sur des objets de relation qui exécutera les validations et les rappels sur tous les objets de la relation. (Pull Request)

  • Ajout de l'option :touch à la méthode save afin que les enregistrements puissent être enregistrés sans mettre à jour les horodatages. (Pull Request)

  • Ajout de la prise en charge des index d'expression et des classes d'opérateurs pour PostgreSQL. (commit)

  • Ajout de l'option :index_errors pour ajouter des index aux erreurs des attributs imbriqués. (Pull Request)

  • Ajout de la prise en charge des dépendances de destruction bidirectionnelle. (Pull Request)

  • Ajout de la prise en charge des rappels after_commit dans les tests transactionnels. (Pull Request)

  • Ajout de la méthode foreign_key_exists? pour vérifier si une clé étrangère existe ou non sur une table. (Pull Request)

  • Ajout de l'option :time à la méthode touch pour mettre à jour les enregistrements avec une heure différente de l'heure actuelle. (Pull Request)

  • Modification des rappels de transaction pour ne pas masquer les erreurs. Avant cette modification, toutes les erreurs survenues dans un rappel de transaction étaient capturées et affichées dans les journaux, sauf si vous utilisiez l'option (nouvellement dépréciée) raise_in_transactional_callbacks = true.

    Désormais, ces erreurs ne sont plus capturées et remontent simplement, ce qui correspond au comportement des autres rappels. (commit)

8 Active Model

Veuillez vous référer au journal des modifications pour plus de détails sur les changements.

8.1 Suppressions

  • Suppression des méthodes dépréciées ActiveModel::Dirty#reset_#{attribute} et ActiveModel::Dirty#reset_changes. (Pull Request)

  • Suppression de la sérialisation XML. Cette fonctionnalité a été extraite dans le gem activemodel-serializers-xml. (Pull Request)

  • Suppression du module ActionController::ModelNaming. (Pull Request)

8.2 Dépréciations

  • Dépréciation du retour de false comme moyen d'arrêter les chaînes de rappels d'Active Model et ActiveModel::Validations. La méthode recommandée est d'utiliser throw(:abort). (Pull Request)

  • Dépréciation des méthodes ActiveModel::Errors#get, ActiveModel::Errors#set et ActiveModel::Errors#[]= qui ont un comportement incohérent. (Pull Request)

  • Dépréciation de l'option :tokenizer pour validates_length_of, au profit de Ruby pur. (Pull Request)

  • Dépréciation des méthodes ActiveModel::Errors#add_on_empty et ActiveModel::Errors#add_on_blank sans remplacement. (Pull Request)

8.3 Changements notables

  • Ajout de la méthode ActiveModel::Errors#details pour déterminer quel validateur a échoué. (Pull Request)

  • Extraction de ActiveRecord::AttributeAssignment vers ActiveModel::AttributeAssignment, permettant de l'utiliser pour n'importe quel objet en tant que module inclus. (Pull Request)

  • Ajout des méthodes ActiveModel::Dirty#[attr_name]_previously_changed? et ActiveModel::Dirty#[attr_name]_previous_change pour améliorer l'accès aux modifications enregistrées après la sauvegarde du modèle. (Pull Request)

  • Validation de plusieurs contextes en une seule fois avec les méthodes valid? et invalid?. (Pull Request)

  • Modification de validates_acceptance_of pour accepter true comme valeur par défaut en plus de 1. (Pull Request)

    Active Job

Veuillez vous référer au Changelog pour des changements détaillés.

8.4 Changements notables

  • ActiveJob::Base.deserialize délègue à la classe de travail. Cela permet aux travaux d'attacher des métadonnées arbitraires lorsqu'ils sont sérialisés et de les lire lorsqu'ils sont exécutés. (Pull Request)

  • Ajout de la possibilité de configurer l'adaptateur de file d'attente pour chaque travail sans affecter les autres. (Pull Request)

  • Un travail généré hérite maintenant de app/jobs/application_job.rb par défaut. (Pull Request)

  • Autoriser DelayedJob, Sidekiq, qu, que et queue_classic à renvoyer l'identifiant du travail à ActiveJob::Base en tant que provider_job_id. (Pull Request, Pull Request, commit)

  • Implémenter un processeur de travail AsyncJob simple et un adaptateur associé AsyncAdapter qui mettent les travaux en file d'attente dans un pool de threads concurrent-ruby. (Pull Request)

  • Changer l'adaptateur par défaut de "inline" à "async". C'est un meilleur choix par défaut car les tests ne dépendront pas par erreur d'un comportement se produisant de manière synchrone. (commit)

9 Active Support

Veuillez vous référer au Changelog pour des changements détaillés.

9.1 Suppressions

  • Suppression de ActiveSupport::JSON::Encoding::CircularReferenceError obsolète. (commit)

  • Suppression des méthodes obsolètes ActiveSupport::JSON::Encoding.encode_big_decimal_as_string= et ActiveSupport::JSON::Encoding.encode_big_decimal_as_string. (commit)

  • Suppression de ActiveSupport::SafeBuffer#prepend obsolète. (commit)

  • Suppression des méthodes obsolètes de Kernel. silence_stderr, silence_stream, capture et quietly. (commit)

  • Suppression du fichier obsolète active_support/core_ext/big_decimal/yaml_conversions. (commit)

  • Suppression des méthodes obsolètes ActiveSupport::Cache::Store.instrument et ActiveSupport::Cache::Store.instrument=. (commit)

  • Suppression de Class#superclass_delegating_accessor obsolète. Utilisez plutôt Class#class_attribute. (Pull Request)

  • Suppression de ThreadSafe::Cache. Utilisez Concurrent::Map à la place. (Pull Request)

  • Suppression de Object#itself car il est implémenté dans Ruby 2.2. (Pull Request)

9.2 Obsolescence

  • Obsolescence de MissingSourceFile au profit de LoadError. (commit)

  • Obsolescence de alias_method_chain au profit de Module#prepend introduit dans Ruby 2.0. (Pull Request)

  • Obsolescence de ActiveSupport::Concurrency::Latch au profit de Concurrent::CountDownLatch de concurrent-ruby. (Pull Request)

  • Obsolescence de l'option :prefix de number_to_human_size sans remplacement. (Pull Request)

  • Obsolescence de Module#qualified_const_ au profit des méthodes intégrées Module#const_. (Pull Request)

  • Obsolescence du passage d'une chaîne pour définir un rappel. (Pull Request)

  • Obsolescence de ActiveSupport::Cache::Store#namespaced_key, ActiveSupport::Cache::MemCachedStore#escape_key et ActiveSupport::Cache::FileStore#key_file_path. Utilisez normalize_key à la place. (Pull Request, commit)

  • Déprécié ActiveSupport::Cache::LocaleCache#set_cache_value au profit de write_cache_value. (Pull Request)

  • Déprécié le passage d'arguments à assert_nothing_raised. (Pull Request)

  • Déprécié Module.local_constants au profit de Module.constants(false). (Pull Request)

9.3 Changements notables

  • Ajout des méthodes #verified et #valid_message? à ActiveSupport::MessageVerifier. (Pull Request)

  • Changement de la manière dont les chaînes de rappel peuvent être arrêtées. La méthode préférée pour arrêter une chaîne de rappel est maintenant d'utiliser explicitement throw(:abort). (Pull Request)

  • Nouvelle option de configuration config.active_support.halt_callback_chains_on_return_false pour spécifier si les chaînes de rappel d'ActiveRecord, ActiveModel et ActiveModel::Validations peuvent être arrêtées en retournant false dans un rappel 'before'. (Pull Request)

  • Changement de l'ordre de test par défaut de :sorted à :random. (commit)

  • Ajout des méthodes #on_weekend?, #on_weekday?, #next_weekday, #prev_weekday à Date, Time et DateTime. (Pull Request, Pull Request)

  • Ajout de l'option same_time à #next_week et #prev_week pour Date, Time, et DateTime. (Pull Request)

  • Ajout des méthodes #prev_day et #next_day en complément de #yesterday et #tomorrow pour Date, Time et DateTime. (Pull Request)

  • Ajout de SecureRandom.base58 pour la génération de chaînes aléatoires en base58. (commit)

  • Ajout de file_fixture à ActiveSupport::TestCase. Il fournit un mécanisme simple pour accéder aux fichiers d'exemple dans vos cas de test. (Pull Request)

  • Ajout de #without sur Enumerable et Array pour renvoyer une copie d'un énumérable sans les éléments spécifiés. (Pull Request)

  • Ajout de ActiveSupport::ArrayInquirer et Array#inquiry. (Pull Request)

  • Ajout de ActiveSupport::TimeZone#strptime pour permettre l'analyse des heures comme si elles provenaient d'un fuseau horaire donné. (commit)

  • Ajout des méthodes de requête Integer#positive? et Integer#negative? dans la veine de Integer#zero?. (commit)

  • Ajout d'une version bang aux méthodes get de ActiveSupport::OrderedOptions qui lèvera une KeyError si la valeur est .blank?. (Pull Request)

  • Ajout de Time.days_in_year pour renvoyer le nombre de jours dans l'année donnée, ou l'année en cours si aucun argument n'est fourni. (commit)

  • Ajout d'un observateur de fichiers événementiel pour détecter de manière asynchrone les modifications dans le code source de l'application, les routes, les localisations, etc. (Pull Request)

  • Ajout de la suite de méthodes thread_m/cattr_accessor/reader/writer pour déclarer des variables de classe et de module qui vivent par thread. (Pull Request)

  • Ajout des méthodes Array#second_to_last et Array#third_to_last. (Demande de tirage)

  • Publication des API ActiveSupport::Executor et ActiveSupport::Reloader pour permettre aux composants et aux bibliothèques de gérer et de participer à l'exécution du code de l'application et au processus de rechargement de l'application. (Demande de tirage)

  • ActiveSupport::Duration prend désormais en charge le formatage et l'analyse ISO8601. (Demande de tirage)

  • ActiveSupport::JSON.decode prend désormais en charge l'analyse des heures locales ISO8601 lorsque parse_json_times est activé. (Demande de tirage)

  • ActiveSupport::JSON.decode renvoie désormais des objets Date pour les chaînes de dates. (Demande de tirage)

  • Ajout de la possibilité à TaggedLogging de permettre aux enregistreurs de journaux d'être instanciés plusieurs fois afin qu'ils ne partagent pas les balises entre eux. (Demande de tirage)

10 Crédits

Consultez la liste complète des contributeurs à Rails pour les nombreuses personnes qui ont passé de nombreuses heures à faire de Rails, le framework stable et robuste qu'il est. Bravo à tous.

Retour d'information

Vous êtes encouragé à contribuer à l'amélioration de la qualité de ce guide.

Veuillez contribuer si vous trouvez des fautes de frappe ou des erreurs factuelles. Pour commencer, vous pouvez lire notre contribution à la documentation section.

Vous pouvez également trouver du contenu incomplet ou des informations qui ne sont pas à jour. Veuillez ajouter toute documentation manquante pour la version principale. Assurez-vous de vérifier Edge Guides d'abord pour vérifier si les problèmes ont déjà été résolus ou non sur la branche principale. Consultez les Directives des guides Ruby on Rails pour le style et les conventions.

Si pour une raison quelconque vous repérez quelque chose à corriger mais ne pouvez pas le faire vous-même, veuillez ouvrir un problème.

Et enfin, toute discussion concernant la documentation de Ruby on Rails est la bienvenue sur le Forum officiel de Ruby on Rails.